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"即可复原。
wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
文章图片

账号注册 阿里云物联网IOT平台网址
  • 因为是阿里的产品,所以注册时候挺方便,可以直接用淘宝账号登录。
  • 点击产品->物联网->物联网设备接入
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 点击立即开通,进如控制台。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
新建产品
  • 在控制台左侧菜单选择设备管理->产品标签。因为之前我已经建立过产品并进行了测试,所以我的这个页面会显示之前创建的产品。如果你是第一次进入,则这个位置中产品的列表栏应该是空的。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 点击右侧创建产品按钮,对你所要创建的产品名称等信息进行设置。填写完毕,点击完成后,产品创建完成。在之前的产品列表页面就会显示出你刚创建的这个产品
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
产品的功能定义
  • 在产品列表中选择你刚创建的产品,点击查看按钮,进入刚刚创建的产品的详情页。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 在上述操作进入的新界面中,选择功能定义标签,在自定义功能一栏中点击添加功能按钮。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 这个上云的实验是通过一个开关量来控制板载灯的亮灭。开光是布尔型的。功能名称是自己命名的(当然阿里云里提供了很多默认的功能名称供选择)。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 上述操作完成后,在定义功能区就会增加一个新的属性,后续如果需要对该属性进行修改,点击该属性右侧编辑按钮即可。至此,产品的创建完成。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 设备的设置
产品设置完成后,需要创建设备来关联之前的产品。
  • 点击控制台左侧的设备标签。在设备列表的右侧点击添加设备按钮。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 添加设备对话框中,你需要关联一个你之前创建的产品。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • DeviceName这一项可以不填,由阿里为你默认生成,点击“确认”按钮后,完成设备的添加。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 这个部分要特别注意,设备添加后,如果从未接入过云,则会显示“未激活”。只有在第一次连通成功后,才会切换成“在线/离线”状态。我的应为已经创建过了,所以缺少一个初次创建时显示的设备三码(ProduntKey、DeviceName、DeviceSecret)页面。那个不是很重要。因为上云用的三码可以通过设备右侧的查看按钮随时得到。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 点击查看按钮后的页面显示。下图中的三码,后续Wemos D1 Mini中还要使用。到这里,WemosD1Mini上云的云端设置就完成了,接下来进入代码编写阶段。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
VSCode(hacklab)端设置 程序端流程图 这个思维导图是边测试边记录下来的,怕自己会忘记整体流程。在最初完成的时候,Wemos D1 Mini始终无法连上阿里云,串口显示aliyunMqqt连接失败。重新粘贴设备的三码,并没有问题,找不到问题的症结在哪里。所以考虑下载一个支持aliyunMqqt的独立Mqtt客户端测试下,但是下载下来还没有用,忽然意识到是我对josn的内存没有进行设置。在platform.ini中增加了相关的设置后。Wemos D1Mini成功上云。我觉得这是个不错的测试思路。所以在思维导图中保留这个部分的思考过程。
wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
文章图片

在VSCode里新建一个Arduino工程
  • 上一篇文章中已经介绍了关于 Vscode+PlatformIod基本环境搭建、使用,包括库搜索的初探。如果对这个部分不是很熟悉,可以参见上一篇帖子,这里就不重复描述了。下面是电梯可以直达。
    VSCode+PlatformIo IDE实现arduino IOT嵌入式编程—Wemos D1 Mini点亮板载LED灯
  • 打开VSCode,点击左侧小蚂蚁图标,在新打开的页面中选择“+New Project”。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片

    -新建一个工程,放在了默认路径。你也可以通过去掉Location位置的选项来将程序存入你自己指定的路径。点击完成进入新的空工程。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
platform.ini文件中添加库
  • 在新建的空工程中选择platformio.ini文件。之后我们添加的各种库需要粘贴在这里。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
添加ArduinoJson库
  • 搜索打开ArduinoJson库。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 找到ArduinoJosn库的安装信息
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 复制ArduinoJosn库的安装信息
    三种方式中选择一种进行复制即可。但是在上云过程中,发现使用最新版的库有个变量的名称改变了。所以最终选择了官方示例中的ArduinoJson@5.13.4版本。wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
添加AliyunMqttArduino
【wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台】这个库的添加方式和上述的ArduinoJosn库安装雷同,只是这个选择最新的版本即可。
platformio.ini文件内容。
但是在初次编译上传后,WemosD1Mini始终更无法连接上Ali的mqtt。报255错误。后来上网查到别人的代码中还有一段对于MQTT内存大小的设置。将那部分代码加入后,上云成功。
lib_deps =
ArduinoJson@5.13.4
AliyunMqttArduino@0.2.0
#设定MQTT包的参数
-D MQTT_MAX_PACKET_SIZE=512
-D MQTT_KEEPALIVE=60
main.c文件中添加应用程序
#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秒连接一次 }

程序编译上传到设备
  • 编译程序
  • 初次运行的时候,系统会自动安装库。以后就不会有下面的提示了。wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 编译成功
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 上传程序
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片

    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
  • 修改VSCode+platformio 默认串口波特率
    上传程序成功后,IDE会默认打开串口监视器。但是其中显示的信息却是乱码。观察发现,原来IDE内嵌的串口波特率默认为9600。而程序中则采用的115200。查阅相关文献,发现需要在platformio.ini文件中增加相关代码:
monitor_baud = 115200
wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
文章图片

上云成功 打开阿里物联网控制台,发现之前的设备已经激活,并显示在线,设备上云成功。后续的文章将会完善这个设备的功能。
  1. 在云端添加mqtt的相关topic功能
  2. 添加CallBack中的代码来实现对云端命令的处理。
  3. 增加相应的App开发。实现手机通过阿里云控制WemosD1Mini端板载灯的亮灭。
    估计下个帖子就可以文成上述内容。敬请期待。
    wemos|VSCode+PlatformIo IDE实现Wemos D1 Mini(ESP8266)接入阿里云物联网平台
    文章图片
参考文献 【1】mqtt客户端
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

    推荐阅读