wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
VSCode+PlatformIo IDE(or hacklab方式)实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
- 阿里云物联网平台端设置
- 云端设备接入整体流程图
- 账号注册
- 新建产品
- 产品的功能定义
- 设备的设置
- VSCode(hacklab)端设置
- 程序端流程图
- 在VSCode里新建一个Arduino工程
- platform.ini文件中添加库
- 添加ArduinoJson库
- 添加==AliyunMqttArduino==库
- platformio.ini文件内容。
- main.c文件中添加应用程序
- 程序编译上传到设备
- 上云成功
- 参考文献
阿里云物联网平台端设置 云端设备接入整体流程图 这个图我是上传的原图,如果看不清可以下载后放大查看细节。或者
ctrl+"+"
来放大屏幕查看。查看完只需ctrl+"0"
即可复原。文章图片
账号注册 阿里云物联网IOT平台网址
- 因为是阿里的产品,所以注册时候挺方便,可以直接用淘宝账号登录。
- 点击产品->物联网->物联网设备接入
文章图片
- 点击立即开通,进如控制台。
文章图片
- 在控制台左侧菜单选择设备管理->产品标签。因为之前我已经建立过产品并进行了测试,所以我的这个页面会显示之前创建的产品。如果你是第一次进入,则这个位置中产品的列表栏应该是空的。
文章图片
- 点击右侧创建产品按钮,对你所要创建的产品名称等信息进行设置。填写完毕,点击完成后,产品创建完成。在之前的产品列表页面就会显示出你刚创建的这个产品
文章图片
- 在产品列表中选择你刚创建的产品,点击查看按钮,进入刚刚创建的产品的详情页。
文章图片
- 在上述操作进入的新界面中,选择功能定义标签,在自定义功能一栏中点击添加功能按钮。
文章图片
- 这个上云的实验是通过一个开关量来控制板载灯的亮灭。开光是布尔型的。功能名称是自己命名的(当然阿里云里提供了很多默认的功能名称供选择)。
文章图片
- 上述操作完成后,在定义功能区就会增加一个新的属性,后续如果需要对该属性进行修改,点击该属性右侧编辑按钮即可。至此,产品的创建完成。
文章图片
- 设备的设置
- 点击控制台左侧的设备标签。在设备列表的右侧点击添加设备按钮。
文章图片
- 添加设备对话框中,你需要关联一个你之前创建的产品。
文章图片
- DeviceName这一项可以不填,由阿里为你默认生成,点击“确认”按钮后,完成设备的添加。
文章图片
- 这个部分要特别注意,设备添加后,如果从未接入过云,则会显示“未激活”。只有在第一次连通成功后,才会切换成“在线/离线”状态。我的应为已经创建过了,所以缺少一个初次创建时显示的设备三码(ProduntKey、DeviceName、DeviceSecret)页面。那个不是很重要。因为上云用的三码可以通过设备右侧的查看按钮随时得到。
文章图片
- 点击查看按钮后的页面显示。下图中的三码,后续Wemos D1 Mini中还要使用。到这里,WemosD1Mini上云的云端设置就完成了,接下来进入代码编写阶段。
文章图片
文章图片
在VSCode里新建一个Arduino工程
- 上一篇文章中已经介绍了关于 Vscode+PlatformIod基本环境搭建、使用,包括库搜索的初探。如果对这个部分不是很熟悉,可以参见上一篇帖子,这里就不重复描述了。下面是电梯可以直达。
VSCode+PlatformIo IDE实现arduino IOT嵌入式编程—Wemos D1 Mini点亮板载LED灯 - 打开VSCode,点击左侧小蚂蚁图标,在新打开的页面中选择“+New Project”。
文章图片
-新建一个工程,放在了默认路径。你也可以通过去掉Location
位置的选项来将程序存入你自己指定的路径。点击完成进入新的空工程。
文章图片
- 在新建的空工程中选择platformio.ini文件。之后我们添加的各种库需要粘贴在这里。
文章图片
- 搜索打开ArduinoJson库。
文章图片
- 找到ArduinoJosn库的安装信息
文章图片
- 复制ArduinoJosn库的安装信息
三种方式中选择一种进行复制即可。但是在上云过程中,发现使用最新版的库有个变量的名称改变了。所以最终选择了官方示例中的ArduinoJson@5.13.4
版本。
文章图片
【wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台】这个库的添加方式和上述的ArduinoJosn库安装雷同,只是这个选择最新的版本即可。
platformio.ini文件内容。
但是在初次编译上传后,WemosD1Mini始终更无法连接上Ali的mqtt。报255错误。后来上网查到别人的代码中还有一段对于MQTT内存大小的设置。将那部分代码加入后,上云成功。
main.c文件中添加应用程序lib_deps =
ArduinoJson@5.13.4
AliyunMqttArduino@0.2.0
#设定MQTT包的参数
-D MQTT_MAX_PACKET_SIZE=512
-D MQTT_KEEPALIVE=60
#include
#include
#include // Wifi名称和密码,你WemosD1Mini上网时需要接入的Wifi账号和密码
#define WIFI_SSID "xxxxxxxxxxx"
#define WIFI_PASSWD "xxxxxxxxxxxx"// LP的设备三元组(PK/DN/DS)根据你云端创建的设备三码进行更改
#define PRODUCT_KEY "xxxxxxxxxxxxxx"
#define DEVICE_NAME "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#define DEVICE_SECRET "xxxxxxxxxxxxxxxxxxxxxx"// Alink协议格式和Topic定义 这个部分是固定格式不用进行修改
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
#define ALINK_TOPIC_PROP_POSTRSP "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post_reply"
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
#define ALINK_METHOD_PROP_POST "thing.event.property.post"// 创建WiFiClient实例
WiFiClient espClient;
//创建MqttClient实例
PubSubClient mqttClient(espClient);
//连接Wifi
void initWifi(const char *ssid, const char *password)
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
Serial.println("WiFi does not connect, try again ...");
delay(3000);
}Serial.println("Wifi is connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
} //监听云端下发的指令
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
if (strstr(topic, ALINK_TOPIC_PROP_SET))
{
StaticJsonBuffer<200> jsonBuffer;
JsonObject &root = jsonBuffer.parseObject(payload);
if (!root.success())
{
Serial.println("parseObject() failed");
} else {
Serial.println("parseObject() success");
//下一步对收到的云端指令进行处理
}
}
}//连接Mqtt
void mqttCheckConnect()
{
bool connected = connectAliyunMQTT(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET);
if (connected) {
Serial.println("MQTT connect succeed!");
// client.subscribe(ALINK_TOPIC_PROP_POSTRSP);
mqttClient.subscribe(ALINK_TOPIC_PROP_SET);
// 订阅属性设置Topic
Serial.println("subscribe done");
}
}void setup() {
Serial.begin(115200);
initWifi(WIFI_SSID, WIFI_PASSWD);
// 连接WifimqttClient.setCallback(callback);
// 设置回调监听云端下发的指令
}void loop() {
mqttCheckConnect();
// MQTT上云
mqttClient.loop();
delay(3000);
// 每1秒连接一次
}
程序编译上传到设备
- 编译程序
- 初次运行的时候,系统会自动安装库。以后就不会有下面的提示了。
文章图片
- 编译成功
文章图片
- 上传程序
文章图片
文章图片
- 修改VSCode+platformio 默认串口波特率
上传程序成功后,IDE会默认打开串口监视器。但是其中显示的信息却是乱码。观察发现,原来IDE内嵌的串口波特率默认为9600。而程序中则采用的115200。查阅相关文献,发现需要在platformio.ini文件中增加相关代码:
monitor_baud = 115200上云成功 打开阿里物联网控制台,发现之前的设备已经激活,并显示在线,设备上云成功。后续的文章将会完善这个设备的功能。
文章图片
- 在云端添加mqtt的相关topic功能
- 添加
CallBack
中的代码来实现对云端命令的处理。 - 增加相应的App开发。实现手机通过阿里云控制WemosD1Mini端板载灯的亮灭。
估计下个帖子就可以文成上述内容。敬请期待。
文章图片
http://www.jensd.de/apps/mqttfx/1.7.0/
【2】mqttfx使用说明
https://yq.aliyun.com/articles/592279
【3】如何更改VSCode+platformio中的串口波特率
http://cn.voidcc.com/question/p-qspluxbj-ue.html
【4】阿里物联网5月10日最新更新文档
https://help.aliyun.com/document_detail/117458.html?spm=5176.11485173.0.0.379559afQuC1Gf
【5】创建产品设备的官方教程
https://help.aliyun.com/document_detail/73728.html?spm=a2c4g.11186623.6.560.795d42a4qTAgBx
【6】hacklab官网说明
https://gaic.alicdn.com/doc/hacklab/bx0tqw.html
【7】阿里云IOT开发者社区
https://dev.iot.aliyun.com/demo
【8】【起源计划】使用IoT Studio开发一个简单的端到端物联网应用解决方案(温湿度监控)
https://dev.iot.aliyun.com/demo/detail/734642
推荐阅读
- 2 万字带你了解 Selenium 全攻略
- 开源工具将 Markdown 转为脑图,还支持 VSCode 和 Vim
- 知名开源项目 Faker.js 被清空项目仓库代码
- JDK|jdk与jre的区别
- Android从入门到精通|Android零基础入门第12节(熟悉Android Studio界面,开始装逼卖萌)
- VsCode打不开终端
- vscode插件快餐教程(5) - 代码补全
- wemos|物联网-wemos D1 Mini (esp8266)实验三 --- WeMos D1Mini 连接 thingSpeak实时显示室内co2(MQ - 135)浓度
- IDE|STM32 HardFault 调试定位