1.嵌入式产品概述最近在做智能语音交互产品,顺便研究学习了嵌入式产品和相关知识。原来自己对嵌入式产品了解不多,总觉得不太容易入手。只有通过学习才能知道,嵌入式产品无处不在,而且价格低廉(几元到几十元),功能强大,开发难度不大。目前主流的嵌入式芯片主要是指单芯片SOC(SystemonaChip),即片上系统或片上系统。SoC包括一个或多个处理器、存储器、模拟电路模块、数模混合信号模块和片上编程逻辑。单片机的芯片一般都很小,一般在1x1厘米左右,价格一般在几元到几元不等。一块芯片集成了CPU、存储器等,可以将设计好的程序烧录到存储器中,开机即可运行。一般嵌入式产品都是由嵌入式芯片和相关模块组成一块完整的电路板,是产品的核心。例如智能音箱产品由电路板(内嵌芯片、WIFI、蓝牙、功放、模数转换、数模转换、PIO(可编程输入输出))、远场麦克风、喇叭、指示灯、按键、外壳等。所有的交互都由嵌入在芯片中的程序控制,比如声音采集,一般是通过模数采集芯片采样为数字值,存储在指定区域,然后由程序读取。开关灯控制是设置相应的PIO值(开/关),环形灯或渐变灯效果,只需使用PMW(脉冲宽度调制)将数字值作为模拟值输出给灯即可。按键对应一个PIO,也会在嵌入式芯片中产生一个中断,然后由中断处理程序进行相应的处理。嵌入式产品的硬件开发涉及面广,也比较专业,如ID设计(IndustrialDesign-工业设计,包括场景交互、造型、材质、表面处理)、MD设计(结构设计-MechanicDesign、拆解加工、结构合理性、元器件匹配、防护设计)、模具加工等。嵌入式产品的软件开发相对简单。目前普遍使用C或C++语言,部分支持Python、Rust或图形组件开发。对于C或C++开发,一般集成开发环境使用uVision。开发时应选择嵌入式芯片型号。开发时无需连接实际设备,即可模拟执行调试。实际接入硬件进行调试时,一般使用USB线连接硬件和电脑(通过USB-UART电路,将USB模拟成串口),电脑会自动识别硬件为串口COM3等设备,然后使用Windowssscom、Macminicom等串口调试工具,打开对应端口即可查看调试信息(代码中一般使用printft函数输出,内容会被重定向到串口输出,方便调试),或者使用在线串口调试硬件调试。uVision支持8051系列、ARM系列等,常用的单片机有8051系列和ARM系列。MCS-51单片机是美国INTEL公司于1980年推出的产品。8051是早期最典型的代表作。已成为8位单片机的标准。支持语音识别的模块采用了STC公司(鸿晶科技)国内知名的单片机产品STC11L56XE单片机、ICRoute公司的LD3320A语音识别芯片、SYN6288语音合成芯片等。ARM英国ARM公司是全球领先的半导体知识产权(IP-IntellectualProperty)提供商,全球95%以上的智能手机和平板电脑都采用了ARM架构。ARM不生产芯片,只设计芯片,然后将设计授权给其他公司,收取授权费,其他公司在此基础上或在此基础上定制修改芯片,生产和销售芯片。ARMv7架构之后的处理器均以Contex命名,如Contex-A系列、Contex-R系列、Contex-M系列。Contex-A系列面向高端应用处理器,一般可安装嵌入式Linux、Android、Windows等操作系统。Contex-R系列主要面向实时系统,适用于需要快速处理的系统,如汽车油门和刹车控制。Contex-M系列适用于要求高性价比、低能耗的产品。一般没有操作系统,也可以安装免费的rtos或ucos操作系统。常用的开发芯片有Contex-A/M系列,比如树莓派使用的ContextA72内核,STMicroelectronics的ARM芯片STM32F103C8T6,既可以作为裸机使用,也可以安装免费的rtos。在ARM芯片中,意法半导体STM的ARM芯片应用比较广泛,比如STM32F103C8T6。命名方式为STM32为32位芯片,F103为增强型,C为48引脚,8为Flash大小为64K,T为封装为LQFP,6表示工作温度范围为-40~+85摄氏度。STM芯片的种类很多,可以下载STMCUFinder进行选择。如果选择支持摄像头接口的芯片,可以列举很多。如果选择STM32F407ZG,其参数定义及说明如下:二、本次开发过程概述本次开发基于电脑CoreSmart的开发板XR-51A_EVB,基于ARMContex-M4F,支持WIFI、声音、摄像头等。此开发板的特点是:?IEEE802.11b/g/n,1x1SISO2.4GHz?内置ARMCortex-M4F32384MHZ?内置416KBSRAM,160KBROM和4MPSRAM?内置1024位efuse?支持DVP接口摄像头,最大支持1920*1088分辨率,板载闪光灯?支持UART/GPIO/PWM/CSI/MIC/Line-in/Speaker接口?支持AES/DES/3DES/SHA/MD5/CRC加密引擎?支持STA/AP/STA+AP工作模式?支持SmartConfig/AirKiss(微信)一键配置?支持串口本地升级和远程固件升级(FOTA)功能?支持二次开发,集成Windows、Linux开发环境?集成音频子系统(AudioSubsystem),包括一个带左右声道语音输入的数字麦克风控制器,1个24位音频数模(DAC)通道,支持从8KHz到192KHz的采样率,1个24位音频用于麦克风输入的模数(ADC)通道,支持8KHz至48KHz采样率,1路24位音频数字(ADC)通道用于线路输入,支持8KHz至48KHz采样率。?集成视频子系统(VideoSubsystem),支持JPEG、YUV编码方式,离线编码方式支持nv12输入格式,支持可配置图片分辨率,最小图片分辨率:32x32,最大图片分辨率:1920x1088SRAM是CPU运行内存用来存储指令或数据,断电后信息丢失。ROM(类似U盘)一般存放编译好的代码或数据,断电后不会丢失。PSRAM一般用于缓存,如图片、声音缓存等,断电后会丢失。3实验过程3.1示例代码的编译软件开发的第一步是运行Helloworld示例程序,嵌入式开发也不例外。按照开发手册一步步来,先下载源码cdxr-50a#建立开发根目录wgethttps://github.com/XradioTech/xradio-skylark-sdk#下载开发板SDKwgethttps://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q2-update/+download/gcc-arm-none-eabi-4_9-2015q2-20150609-linux.tar.bz2#下载arm交叉编译工具tar-xvfgcc-arm-none-eabi-4_9-2015q2-20150609-linux.tar.bz2cdxradio-skylark-sdk#进入sdk根目录vimgcc.mk#修改全局gcc编译参数,添加arm交叉编译环境#--------------------------------------------------------------#交叉编译器#--------------------------------------------------------------CC_DIR:=/home/xr-50a/gcc-arm-none-eabi-4_9-2015q2/binCC_PREFIX:=$(CC_DIR)/arm-none-eabi-cdproject/demo/hello_demo/gcc#进入hello工程下的编译目录gccmakeconfig#配置开发板类型(XR872,40M)makelib#编译库文件(包括声音驱动、图像显示、网络等,编译成相应的模块库文件.so)#具体模块如atcmd、audio、cjson、console、driver、efpg、fs/fatfs、image,jpeg,克恩el,libc,net,ota,pm,rom,smartlink,sys,util,xzmake#编译hello工程,形成执行文件。axfmakeimage#将执行文件打包成烧录镜像文件。Bin开发板通过TypeC接口连接到Windows电脑上,运行烧录程序PhoenixMC.exe,选择上面的镜像文件,烧录,电脑运行sscom串口通讯软件,选择端口一般为Com3,打开端口,按开发板的reset键重启,开发板的烧录程序会自动运行,在电脑端的sscom中可以显示相应的调试信息。开发编译环境可以是Windows也可以是Linux,操作方法基本相同。Windows下安装Cygwin+GCC。安装完成后,在cygwin-likeLinux环境下运行命令相同。3.2获取物联网接入码开发物联网应用,可以接入的物联网平台很多,也可以选择开源的物联网平台。商业平台如腾讯连连IoTExplorer、阿里云IoT、中国移动OneNET、华为云IoT、机智云等,商业平台一般对小批量产品免费接入,比如10台以下。本开发板内置镜像可连接腾讯连连。按三下复位键进入配网模式。使用手机扫描厂家提供的二维码打开微信小程序并联网(需要手机连接WIFI),联网成功后可以在小程序中查看设备状态,可以开关灯,也可以直接跟开发板对话,比如“小智小智,今天天气怎么样?”,“小智小智小智,放首歌”,“小智小智,转在台灯上”等等。对比下来,机智云的物联网接入还是比较简单的。物联网接入的大致流程:注册开发者账号、定义物联网产品、数据点、虚拟设备测试、代码移植、实机调试、上线。定义物联网产品就是定义物联网产品的基本信息,包括名称、类型、通信方式、ProductKey、ProductSecret等,可以直接在控制面板上定义。数据点是设备产品功能的抽象,以Json格式表示,用于描述产品功能及其参数。比如一个智能灯,我们可以定义一个OnOff的布尔型数据来控制灯的开关,定义一个0-100的整数型数据来定义灯的亮度。创建数据点后,就可以确定设备与云端通信的数据格式,设备与机智云可以相互识别设备与机智云的互联数据。确定了虚拟设备测试产品定义和数据点后,我们就可以认为系统已经为我们生成了一个虚拟物联网设备,根据我们的需求进行定义,可以用于虚拟测试。系统提供控制台直接测试和手机APP控制测试。在测试界面或手机APP上,可以方便的看到自己的设备,控制设备。控制命令发出后,虚拟设备的状态就会发生。相应的改动和我们最后完成的类似。通过这种方式,我们可以对我们的产品有一个直观的认识和了解。控制台操作界面如下:手机APP控制界面如下:代码移植接下来会实现我们的代码,机智云可以自动生成MCUSDK,即根据产品属性自动生成物联网接入码,上面定义的数据点。可以根据设备中嵌入的代码修改和编译此代码。cdxr-50a/xradio-skylark-sdk/project/demo#进入demo目录cp-rhello_demogz-iot#从hello_demo复制到IoT工程目录gz-iotrm*.h,*.c,*.d,*.o#删除其他文件,保留gcc、image目录和prj_config.hmvxxx/Gizwitsgz-iot#移动机智云生成的访问代码,主要包括Gizwits、User、Utils目录cdgz-iot/gcc#进入ProjectgcccompilationdirectoryvimMakefile#修改本工程的编译参数,主要是添加本工程的include文件路径PRJ_ROOT_PATH)/Utilsmakeconfig#配置开发板类型(XR872,40M)makelib#编译库文件(包括声卡驱动、图像显示、网络等,编译成相应模块的库文件.so)make#编译hello工程形成执行文件.axfmakeimage#将执行文件打包成烧录镜像文件.bin,生成文件../image/xr872/xr_system.imgWindows电脑运行烧录软件,烧录到开发板。机智云接入代码包括完整的业务逻辑,如PRODUCT_KEY、dataPoint_t、gizwitsProtocol_t等,您只需要参考生成代码目录下的MCU_COMMON_User_Guide_V0.4.pdf文档即可。移植主要包括四个方面,代码量不大。实现串口打印驱动的xr50模块已经实现,可以在程序中使用GIZWITS_LOG或printf打印调试信息。芯片复位功能的实现是根据芯片的指令来实现的。如果不需要从接口控制设备复位,可以不实现。实现一个定时器需要基于xr50实现一个毫秒定时器,回调函数设置为TIMER_IRQ_FUN。实现串口A驱动主要实现WIFI数据收发接口,参考at_demo、wlan_demo示例工程内容修改。3.3其他常用物联网模块最简单的物联网控制芯片是乐鑫ESPWiFi芯片/模块,如ESP8266。本模块其实是一个WIFI模块,只不过集成了TensilicaL106超低功耗32位微型MCU。MCU除了用于控制WIFI功能外,将MCU的其余能力对外开放,因此支持编程开发,也有外设PIO。这样的模块是比较完整的开发板??(一般和烧录器同时购买,一共10个左右),支持物联网开发,所有的物联网平台都很好的支持这个模块。其他常用的物联网模块如下:4.展望嵌入式芯片价格便宜,集成开发环境方便调试,可以在线编程,所以嵌入式或者物联网开发还是很容易上手的。利用嵌入式开发,我们可以开发出日常生活中的智能设备,比如自动浇花器、音乐门卫等,充分发挥你的想象力:)后续可以关注RISC-V,它是基于精简指令的set(RISC)开源指令集架构(ISA)的原理,但还不成熟,喜欢DIY的可以多了解下。这几年应该还是ARM的天下吧。ARM芯片价格低廉、易于使用且信息量大。后续可以关注Toit,它由谷歌ChromeV8团队开发,成立于2018年,旨在为物联网设备构建通用固件,以替代传统的开发流程。它们提供了一套全新的功能,甚至是专门为物联网开发的一种新的类似Python的编程语言。顺便说一句,目前有很多商业化的物联网产品。我建议你可以直接从淘宝上搜索购买。我是一个米粉,喜欢用小米的产品,比如用小米智能插座(<50元)、小米体温计(<20元)、门窗探测器(<50元)来控制电脑的运行,物美价廉,把小米插头插在插座上,再插上电脑电源。可以用手机APP远程控制电脑开关,还可以查看室温。如果温度高,可以自动打开风扇降温。开房时,也可以在远程APP中查看。电脑的耗电量也可以随时在APP上查看。
