本系列课程面向有嵌入式开发经验的同学,用来介绍如何在涂鸦的Wi-Fi系列模组和Wi-Fi&Bluetooth LE系列模组上进行二次开发。
上篇回顾:Wi-Fi模组二次开发——SoC开发环境搭建
在虚拟机搭建完成后,我们需要先在涂鸦IoT平台上创建产品,得到PID和功能点等相关数据才可以进行开发。本章节将会通过对提供好的demo进行修改,带你快速体验如何通过编写涂鸦模组固件实现对产品的开发。
Demo功能介绍:长按CBU Nano 板上的S2(TY_GPIOA_9)按键,将会重置设备,使设备进入配网模式。短按S2键控制板载LED灯D2(TY_GPIOA_16)。
硬件:
CBU Nano主控板(也可以是涂鸦的Wi-Fi模组或其他型号的三明治Wi-Fi主控板)。
一根micro usb线
如果使用的是模组或没有串口芯片的三明治开发板,至少需要准备1个USB 转 TTL 串口工具。建议准备2个USB 转 TTL 串口工具,一个打印log,一个用来烧录使用。
实验中用到的引脚介绍如下,点击查看CBU Nano板的详细介绍。
丝印名称 | 芯片引脚 | 备注 |
---|---|---|
S2 | GPIO_9 | 按键引脚,按下为低电平。涂鸦封装的引脚名称为TY_GPIOA_9 。 |
D2 | GPIO_16 | LED引脚,低电平点亮。涂鸦封装的引脚名称为TY_GPIOA_16 。 |
软件:
代码编辑器
由于编译是在Ubuntu下进行的,那么代码的编辑软件在Ubuntu下可以使用vscode或者你喜欢的其他代码编辑软件都可以,哪怕记事本也没有问题,可能代码跳转不太方便。Windows下推荐可以vscode,但实际上使用vscode可能在代码跳转上也不是那么好用。Source Insight 4.0在阅读代码和编辑上很强大,上手可能需要一点学习成本。
模组SDK
模组SDK获取详细请参考01.环境搭建中的5.编译验证。
涂鸦IoT平台: 在对产品进行开发前,需要在涂鸦IoT平台上成功创建了产品,拿到了要开发产品的产品 ID(PID)。产品创建流程可以参考涂鸦IoT平台介绍进行创建。
申请PMS账号,下载「生产解决方案」
注册PMS账号
进入涂鸦PMS系统,如果没有PMS系统的账号,需要先注册一个PMS账号。
注册流程如下图,选择个人开发者即可,按照系统注册指引填写相关信息。等邮箱收到涂鸦发送过来的邮件就说明审核已经通过。
下载安装「生产解决方案」
1.审核通过后,输入你的账号、密码,即可成功登录涂鸦PMS系统。登录成功后,依次点击知识库管理->软件下载->生产解决方案
开始下载「生产解决方案」。
2.下载完成后,开始准备安装「生产解决方案」。
双击「云模组烧录授权平台」安装包,可能出现下面的警告,点击更多信息。
点击仍要运行。
3.安装过程中,程序安装的位置可以根据自身需求进行设置,建议不要有中文路径,避免出现一些意想不到的问题。
安装完成后,启动「生产解决方案」,登录的账号和密码与涂鸦PMS系统(涂鸦智造)的账号和密码一样。
然后点击云模组打开[云模组烧录授权工具]。
4.如果安装完成后出现下图的情况:红色箭头指向的红色框内全为白色。那么我们还需要对软件做一些设置使它恢复正常。如果为红色箭头指向的红色框内为黄色,则说明安装成功,可跳到1.3进行阅读。
5.点击文件->设置
。
6.将箭头①指向的“多路选择”的1*1
选项改为1*2
,点击“确认”。
7.“多路选择”改变后如下图所示,会出现两个黄色框。
8.将多路选择的1*2
,改回到1*1
,使两个黄色框变为一个黄色框,「云模组烧录授权工具」的设置就完成了。
在Ubuntu通过cd
命令进入到SDK中的apps目录下,然后执行下列命令从GitHub中拉取写好的示例代码。
在SDK的apps目录下新建一个`bk7231n_light1_io_xx`的文件夹,该文件夹名称就是工程名,也是上传固件时使用的固件标识名。所以大家在创建的时候文件夹名称应改成不同的名字,不然在编译生成固件后,上传到云平台时会因为已经有了该固件标识名导致固件上传失败。 固件命名可以按照:芯片平台+产品类型+产品特性+厂商标识名/个人姓名缩写,也可按照个人喜好来命名。如:固件名称可以命名为`bk7231n_light1_io_xx`,`bk7231n`表示使用的是bk7231n芯片进行开发的,`light1`表示一路灯,`io`表示通过IO口拉高拉低来控制灯的亮灭,`xx`为名字缩写。
git clone https://github.com/Tuya-Community/bk7231n_light1_io_xx.git
可以根据下面的提示将PID信息改为你创建的产品的PID信息,也可以不对代码进行任何更改,跳过该步骤直接进入下一步编译生成固件继续操作。
将/apps/bk7231n_light1_io_xx/include
目录下的tuya_device.h
中的PRODECT_ID
修改为你创建得到的PID。
#ifndef __TUYA_DEVICE_H__
#define __TUYA_DEVICE_H__
/* Includes ------------------------------------------------------------------*/
#include "tuya_cloud_types.h"
#include "tuya_cloud_com_defs.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef _TUYA_DEVICE_GLOBAL
#define _TUYA_DEVICE_EXT
#else
#define _TUYA_DEVICE_EXT extern
#endif /* _TUYA_DEVICE_GLOBAL */
// device information define
#define DEV_SW_VERSION USER_SW_VER
#define PRODECT_ID "fnrwpglflmbhjvvh" /* 将这里双引号内的PID更改为你创建产品得到PID */
/* Exported functions ------------------------------------------------------- */
_TUYA_DEVICE_EXT \
OPERATE_RET device_init(VOID_T);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __TUYA_DEVICE_H__ */
配网按键引脚可在/apps/bk7231n_light1_io_xx/src
中的tuya_device.c
中,通过修改第38行的WIFI_KEY_PIN
进行修改配网按键的引脚。
控制的LED引脚,可以通过修改/apps/bk7231n_light1_io_xx/include
中的light_system.h
文件中的LIGHT_PIN
,选择要控制的LED引脚。
在Ubuntu终端中将路径切换到有build_app.sh
的路径下,输入下列命令进行编译。
例:我这里处于
/home/share/samba/ty_iot_sdk_bk7231n_2.3.1/
路径下,开始执行下列命令。
sh build_app.sh ./apps/bk7231n_light1_io_xx bk7231n_light1_io_xx 1.0.0
命令 | 含义 |
---|---|
sh build_app.sh | 使用shell 命令执行build_app.sh 脚本。 |
./apps/tuya_demo_light_pwm | 编译的工程所在的路径。 |
tuya_demo_light_pwm | 固件名称,固件标识名,必须要和工程文件夹名称一致。 |
1.0.0 | 软件版本号。 |
在编译完成后,会将生成的固件按照不同版本放在所编译的工程目录下output
文件夹内。
例:如果我们编译的是
apps
文件夹中的bk7231n_light1_io_xx
工程,编译版本为1.0.0
,那么生成的固件将会放在apps/bk7231n_light1_io_xx/output/1.0.0
中。
编译后的产物如上图所示,这里主要关注的bk7231n_light1_io_xx_QIO_1.0.0.bin
、bk7231n_light1_io_xx_UA_1.0.0.bin
和bk7231n_light1_io_xx_UG_1.0.0.bin
这三个文件。
文件名 | 功能 |
---|---|
bk7231n_light1_io_xx_QIO_1.0.0.bin |
生产区固件:boot+用户区固件+检测固件。 |
bk7231n_light1_io_xx_UA_1.0.0.bin |
用户区固件 |
bk7231n_light1_io_xx_UG_1.0.0.bin |
升级固件 |
自定义开发固件不上传到云平台,直接将UA文件烧录到已授权的模组中,会导致配网一直无法成功。
1.进入涂鸦IoT平台,在开发的产品中找到“硬件开发”,按照下图指示点击“新增自定义固件”,填写相关固件信息。
“固件标识名”必须和你编译时的apps
下的工程文件夹的名称一致。
也就是说这里的固件标识名填写为
wifi_one_light
,那么上传的固件应为SDK包中apps
目录下的wifi_one_light
文件夹中编译所生成的固件。
“Flash大小”为16Mbit
也就是2M大小。不同模组的flash大小可以在涂鸦的文档中心中查看相关模组的flash大小。
1byte(字节) = 8bit(位)。 16Mbit / 8 = 2M。
相关信息填写完成后(没有被②的框框圈到使用默认设置即可),点击“上传固件”,进入“上传固件“步骤。
2.“固件版本”需要和编译时输入的版本号对应一致。“生产固件”上传包含QIO
的bin文件,“用户区”上传包含UA
的bin文件,“升级固件”上传包含UG
的bin文件。运行模式选择QIO
。点击保存。
注意:该顺序不一定固定,在后续固件管理中就不是按照“生产固件”,“用户区固件”和“升级固件”的顺序来排序,所以一定要看清楚是什么类型的固件在进行上传。
3.点击“进行固件上架”。
4.选择“不限范围”,点击“确认上架”。
注意:这里选择不限范围是为了方便个人开发。如果是公司将要量产的产品,请严格限定固件的使用范围。
PMS账号、云模组烧录授权工具的获取,烧录授权中常见问题都可以通过阅读 烧录授权 章节获取到答案。
【一定要上传固件】将我们编译生成的固件上传到涂鸦IoT云平台,成功上架后,就可以免费领取激活码,通过「云模组烧录授权工具」进行烧录授权。
1.点击“免费领取激活码”。
2.交付方式选择“生产凭证”,点击“提交订单”。
“生产凭证”:产测授权工具“烧录授权”功能读取的凭证编码,可自动抓取指定数量的授权码,随固件一起逐个写入设备。需上传生产固件至涂鸦IoT平台。
“授权码清单”:写着每一个授权码UUID及相关信息的表单,需自行逐个写入设备。
“生产凭证-仅授权”:产测授权工具“独立授权”功能读取的凭证编码,无需固件,即可对设备进行逐个授权。
3.点击“去订单列表页看看”。
4.根据PID信息找到要烧录授权的设备,点击箭头②的“下载生产凭证”。
5.解压下载好的“生产凭证”,打开Token_information.txt
文件,复制“生产凭证”。在「云模组烧录授权工具」中输入生产凭证,选择工位“烧录授权”。
6.这里可能会出现获取token失败,没有操作权限
的错误,解决办法如下:
出现该错误需要在PMS系统中,按照下图指示,依次点击“生产管理->工单管理->生产凭证确认”,然后输入刚刚没有操作权限的“生产凭证”点击“确认”。再回到「云模组烧录授权工具」工具中输入该生产凭证点击确认即可开始烧录授权操作。
7.生产凭证输入完成后,会如下图显示。会在“基础信息”一栏中显示固件的相关信息。
注意:为了使CBU Nano板可以通过Micro USB进行烧录和打印日志,需要将板子上的四个拨码开关全部打开(拨码位置拨到ON一端,非数字一端)。
1.在「云模组烧录授权工具」根据按照箭头的指引,输入生产凭证,选择工位为“烧录授权”,点击”确认“。
2.按照下表通过USB转UART工具把三明治开发板与电脑连接起来。
USB转UART引脚 |
三明治SOC开发板引脚 |
---|---|
VCC |
VCC |
GND |
GND |
TX |
RX |
RX |
TX |
选择烧录的串口,点击运行,然后马上给模组断电再上电或按下复位按键使模组重启,等待一会时间就会发现开始对模组进行烧录授权操作了。
重启模组不要直接把串口工具从电脑上拔掉,这样会导致烧录失败的。应拔掉再插上模组与串口工具连接的VCC和GND的杜邦线。
CBU的三明治SOC开发板自带了CH304串口芯片。在点击运行后,按下CBU的三明治SOC开发板上USB口旁的复位按键即可重启芯片,开始烧录授权。
3.如果在烧录授权过程中出现进入产测失败的错误,可能原因是因为这个开发板在上一次烧录授权后已经累计连接到网络超过了15分钟了。设备此时关闭了产测功能,导致无法进入产测出现了授权失败的情况。解决办法参考烧录授权章节中的 3.1 进入产测失败 的内容进行解决。
将固件成功烧录到模组后,我们需要下载涂鸦智能APP对设备进行配网,配网成功后就可以通过涂鸦智能APP对设备进行控制。涂鸦智能app可以在手机的应用商城中搜索下载安装,也可以通过扫描下面的二维码进行下载安装。
关于配网:
如果在烧录授权的时候使用的是「云模组烧录授权工具」进行烧录授权的话,那么在烧录授权完成后重启设备默认将会进入配网模式。
如果设备之前已经配网成功,烧录授权的时候使用原厂工具只烧录了用户区的固件且没有更改PID,那么设备在上电后仍会再次去连接上次成功连接的网络。想要对设备重新进行配网,需要重置设备,使设备进入配网模式。
对使用的模组是Wi-Fi模组还是Wi-Fi&Bluetooth LE双模模组的不同,配网的流程也有所不同。我们这里使用的是CBU模组,采用7.1 Wi-Fi&Bluetooth LE双模模组产品配网进行配网。
设备配网时,应选择2.4G频段的Wi-Fi进行连接配网。
Wi-Fi&Bluetooth LE双模模组目前有WB系列、WBR系列、JWBE系列、CB系列、CR系列和HPWSMS1模组。
1.配网时,保证设备处于配网模式,打开涂鸦智能app。进入app后,点击右上角的加号,开始添加设备。
2.Wi-Fi&Bluetooth LE双模模组是通过蓝牙将要连接的Wi-Fi的相关信息发送给设备的。点击箭头指向的“自动发现”,就可以看到app搜索到可以连接的设备,然后点击“下一步”。
3.将要配网的设备打上对号选中,然后点击配网设备所在框中的右上角的加号进入下一步。
4.确认设备将要连接的Wi-Fi名称和密码是否正确(如果密码栏为空,请输入Wi-Fi密码)。
5.配网成功后如下图显示,可以退出到主界面,使用涂鸦智能app对设备进行控制了。
Wi-Fi模组没有蓝牙,通过EZ或AP的方式进行配网。
1.进入涂鸦智能App主界面后,点击右上角的加号,开始添加设备。
2.按照产品品类在“手动添加”的栏目下找到有“(Wi-Fi)”的图标(下图箭头②指向的位置)。
3.确认连接的Wi-Fi是2.4GHz的,确认设备连接的Wi-Fi名称和密码是否正确。点击下一步。
4.按照App指示进行操作,重置设备,使设备进入到配网模式(配网指示灯快闪,或其它你写的配网模式)。
5.开始配网的界面如下图显示,等待一段时间,使设备配网成功。
6.设备配网成功,并成功连接到涂鸦云平台的界面如下。接下来就可以通过涂鸦智能app控制设备了。