LV02-01-天猫精灵IOT-01-WiFi智能灯-02-实现开发板对接天猫精灵

本文主要是天猫精灵IOT——实现开发板对接天猫精灵的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

前面我们已经在阿里物联网平台创建了设备,接下来我们来看一看如何让我们的开发板接入平台。

一、工程代码

1. 工程创建

我们的开发板联网接入阿里云平台的demo在AliOSThings是有的,我们打开AOS_SDK_PATH/application/example:

image-20231212212900231

我们关注这个 linkkit_demo 即可,我们依此为demo创建一个mk3080的工程

1
aos create project -b mk3080 -t linkkit_demo linkkit_mk3080

我们创建完毕后,打开这个目录,我们可以看到以下文件:

image-20231212213216331

我们打开看就会发现,这里面好几个源文件,里面似乎都有一些相同的代码,就比如这些跟产品相关的宏的定义:

1
2
3
4
#define PRODUCT_KEY      "a1FxISeKbq9"
#define PRODUCT_SECRET "ThNbP5iNUQ1lQe2Q"
#define DEVICE_NAME "alen-activate-test"
#define DEVICE_SECRET "jcumDL5AJRgU7zRNcCcnHRiQmtii0vDn"

不可能说这些宏被定义好多次,肯定是最终就一个源文件参与编译了,那我们编译的是一个呢?我们来看一下aos.mk文件:

image-20231212213425015

发现这些都是由宏来控制的,我们找到 linkkit_mk3080/aos_config.h 这个文件,打开就会发现这几个宏:

image-20231212213938022

会发现,只有LINKKIT_DEMO_CONFIG_CASE_SOLO定义了,并且值为1,所以参与编译的是linkkit_example_solo.c这个文件。所以后面我们修改相关的内容就从这个文件开始。

2. 修改相关代码

我们需要修改一下跟产品相关的几个宏,我们打开 linkkit_mk3080/linkkit_example_solo.c 文件,修改下面几个宏如下:

1
2
3
4
5
6
7
8
9
10
11
// for demo only
// #define PRODUCT_KEY "a1FxISeKbq9"
// #define PRODUCT_SECRET "ThNbP5iNUQ1lQe2Q"
// #define DEVICE_NAME "alen-activate-test"
// #define DEVICE_SECRET "jcumDL5AJRgU7zRNcCcnHRiQmtii0vDn"

#define PRODUCT_KEY "a1BzTBsjEp4"
#define PRODUCT_SECRET "Cn4D0R3OMUMHx9eK"
#define DEVICE_NAME "503dec2b085d"
#define DEVICE_SECRET "74d8630b60becfa5dcb27a68b77cca93"

这几个宏的值哪里来的?在我们创建产品的时候有:

image-20231212215118946

还有一个PRODUCT_SECRET,在这里有:

image-20231212215219207

这样我们就修改完毕了,然后编译代码,烧写到开发板中就可以了。

3. 烧录到开发板

我们这里使用的是mk3080开发板,前面学习AliOSThings的时候已经很熟悉这个开发板的程序更新了,需要知道的是,这里这个demo编译完成后由500多kb,用ota的方式的话,可能会比较慢,在意下载速度的话,可以使用烧写工具啥烧写,那个会快一点。

4. 测试结果

烧写完成后,开发板运行会有这些打印信息:

image-20231213073939327

然后会有大量的awss开头的打印信息,这表示开发板在扫描附近的WiFi,但是并不会主动去连接。

image-20231213074009302

我们在串口终端敲一下 help 命令,会有以下打印信息:

image-20231213074132987

这就是linkkit_mk3080工程为我们提供的默认命令,这里简单介绍两个:

1
2
reset : 恢复出厂设置
active_awss :进入配网模式命令,我们想要天猫精灵对开发板进行配网的话,需要执行 active_awss start命令。

二、开发板联网

1. 软硬件准备

1.1 天猫精灵智能音箱

用的这款方糖3 智能音箱:

image-20231213074955022

1.2 天猫精灵app

我们直接去应用商店搜索天猫精灵即可:

image-20231213075144757

1.3 mk3080开发板

这里使用的是mk3080开发板,WiFi芯片为rtl8710bn:

image-20231105202910612

2. 天猫精灵语音配网

我们首先使用天猫精灵语音控制来配网。

2.1 mk3080进入配网模式

我们前面知道,烧写完程序后,启动开发板,会有如下打印信息:

image-20231213191950412

此时我们需要执行下面的命令进入配网模式:

1
active_awss start

我们执行完后,会有以下打印信息:

image-20231213192345323

这个时候开发板就进入了配网模式。

2.2 语音唤醒天猫精灵开始配网

  • (1)语音:天猫精灵,找朋友

先说天猫精灵,等待回应后,说出找朋友三个字,然后天猫精灵就会提示正在扫描智能设备,然后开始扫描周围处于配网模式的设备。

  • (2)语音:连接

当天猫精灵扫描到我们的mk3080开发板的时候,会提示我们发现了我们的智能设备(这里是智能灯),会询问我们是否连接,然后会有“叮咚”一声的提醒,提醒后,我们说出连接,我们的mk3080就会开始配网。时候就会提示连接中,请稍后,并且,开发板的串口会有以下打印信息:

image-20231213193207493

还有很多的打印信息,当连接成功后,天猫精灵会提示连接成功,然后我们会看到一系列这样的打印,有这样的MQTT的字样的打印信息说明我们的设备联网成功。

image-20231213193306319

2.3 设备上线

这个时候我们进入网页端的项目中:项目管理 - 生活物联网平台 (aliyun.com),会发现我们的设备已在线:

image-20231213193532843

三、自动进入配网模式

1. 工程修改

我们每次配网是要手动输入命令才能进入配网模式,我们可以在 linkkit_mk3080/app_entry.c 中添加以下代码,实现开机自动进入配网模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void linkkit_check_awss(void)
{
int ret = 0;
int32_t len = 0;
netmgr_ap_config_t netmgr_ap_config;

memset(&netmgr_ap_config, 0, sizeof(netmgr_ap_config_t));
ret = netmgr_get_ap_config(&netmgr_ap_config);
len = strlen(netmgr_ap_config.ssid); // 检查是否已经配过网
LOG("ret = %d, len = %d", ret, len);
if(len <= 0)
{
LOG("++++++++++ network is not config,entry awss_config_press!!! ++++++++++", ret, len);
awss_config_press(); // 若没有配过网,这里则自动进入配网模式
}
return;
}

我们在 下面的函数中调用即可:

1
int application_start(int argc, char **argv);

2. 测试结果

我们将开发板恢复出厂设置,然后重启,会看到有如下打印信息:

image-20231213201758752

这就说明没有配网,然后我们直接用天猫精灵语音进行配网,发现是可以直接配置的,这就实现了开机未配网自动进入配网模式。我们用天猫精灵配网成功后,再重启设备,会发现有下面的打印信息:

image-20231213201949987

此时就会自动入网,不需要进行配网。