最详细、最全面的连接阿里云物联网

(1)登录进入
1、浏览器搜索阿里云

2、点击阿里云界面

3、点击控制台

4、登录


输入账号密码
(2)物联网平台
1.点击左上角三横线

2.弹出界面找到物联网平台

3.找到公共实例

4.点击公共实例界面

点击后就可以进入物联网平台。
5.创建产品
1)点击设备管理
在左边是菜单栏,点击设备管理。

将会用到产品、设备、设备模拟器。
(2)点击创建产品
点击设备管理下面的产品,进入产品页面。

进入产品页面。


还需要填写所属品类,这是为了推广后面的手机APP用的,可以不用,但在这里必须填写,可以随便选一个。
然后点击确认。
6.创建设备
设备可以理解为具体的传感器。
最好填写一个符合实际、可以记住的名称。
添加产品点击确定后就会弹出下面这个界面,可以直接点击添加设备(这是添加设备的两种方法之一)。

添加设备有两种方法,接着产品添加完成后添加,也可以在弹出扇面这个界面后不管,直接点击左边菜单栏里面的的设备按钮。

在弹出的界面里选择产品。
也就是这个传感器(设备)是属于哪一个产品里面的。也就是进行归类。

如果是已经进行过操作,在下拉列表里会看见许多产品,一定要注意这个设备是归属于哪一个产品,要注意点击选择。



但是需要注意,设备名称,也就是DeviceName,这个需要记住,而且最好有意义。
点击确认后,弹出下面的界面就可以了。

点击完成。
7.添加自定义功能


注意:这里的未激活是指没有设备连上,而不是说注册未激活,不必着急。
1)点击产品

在左边菜单栏里点击产品,然后到右边找到刚刚添加的产品(这里是“温湿度显示”),点击名字就可以弹出一个对话框。

点击选择功能定义即可。

点击编辑草稿。

功能就是指这个设备将来有什么用,能完成哪些作用。

点击添加自定义功能。



可以根据需要再添加一个功能。
比如温湿度传感器除了温度意外还有湿度,所以再点击添加自定义功能。


添加的第二个功能——采集湿度信息。


最后一定要点击发布上线。

发布上线并没有完成,一定还要点击右上角发布(相当于发布上线是填写完成并报告,最后完成后有很多功能,就算只填写了一个,但是在后台也可以看成需要选择,所以还要在这里面选择一个去发布)。


(3)平台内测试
回到设备管理菜单栏。
1)点击设备模拟器

2)选择产品

选择调试产品名称和设备。



3)查看


【2】MQTT.fx、MQTTX连接云物联网调试
(1)连接
1】点击操作里面的查看

2】MQTT参数

3】点击查看MQTT参数
这是一个悬浮窗口,可以不用复制,直接在上面复制相关数据到MQTT.fx
4】打开MQTT.fx
因为云里面的MQTT参数是一个悬浮窗口,所以不用关闭,点击MQTT.fx后,注意把对应的数据复制粘贴就可以了。

5】点击连接

右边变成绿色就表示连上阿里云了。
6】确认

这个时候回到设备可以在设备列表里看到在线状态。
(2)使用
1】找到产品


2】进入topic
设备管理→产品→(右边)topic类列表

因为是功能定义里面的数据传输,所以选择物模型通信。

复制topic

/sys/k0s88ZAzwWj/${deviceName}/thing/event/property/post
注意这里面有一个变量。
${deviceName}——这是一个变量。
/sys/k0s88wWeQEU/humiture/thing/event/property/post
把变量修改为设备名。
设备名可以在设备信息里找到。

3】通信传输

在MQTT.fx里输入js语句:
{
"method":"thing.event.property.post",
"params":{
"hum":60,
"temp":20
}
}
回到设备里查看



就可以看到上传的数据了。
也可以在日志服务里查看
1)点击日志服务

2)点击查看

3)前往查看
可以发现,日志里的内容就是MQTT.fx发布的消息。
【3】ESP32连接物联网云
(1)ESP32
ESP32调试成功,可以发布数据,但是后面的ESP8266不可以,还需要调整ESP8266的代码。
下面是完整代码。
        #include<WiFi.h>
                #include<PubSubClient.h>
                 
                const char* ssid ="@Ruijie-sAF11";//wifi名
                const char*password ="luo200408";//wifi密码
                const char*mqttHostUrl = "iot-06z00by0c4a5y2i.mqtt.iothub.aliyuncs.com";//阿里云服务器域名
                const int mqttPort =1883;//端口号
                const char*mqttUser = "temp&k0s88C6ZIY7";//username
                const char*mqttPassword = "b1d86cce3d0e07fb98b72f4bfedfcc475cf5d4293b601913fe8f6ee29a0aeb90";//密钥
                const char*clientId = "k0s88C6ZIY7.temp|securemode=2,signmethod=hmacsha256,timestamp=1707613008198|" ;//连接id

                #define PRODUCT_KEY       "k0s88C6ZIY7"
                #define DEVICE_NAME       "temp"
                //下面组包用
                #define ALINK_BODY_FORMAT         "{\"id\":\"level\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
                #define ALINK_TOPIC_PROP_POST     "/sys/"PRODUCT_KEY"/"DEVICE_NAME"/thing/event/property/post"
                 
                unsigned long lastMs = 0;

                WiFiClient espClient;
                PubSubClient client(espClient);


                //连接wifi
                void wifiInit()
                {
                  WiFi.begin(ssid,password);
                  while (WiFi.status()!= WL_CONNECTED) {
                    delay(500);
                    Serial.println("Connecting to WiFi..");
                  }
                     Serial.println("Connected to the WiFi network"); 
                }


                //mqtt连接
                void mqttCheckConnect()
                {
                   client.setServer(mqttHostUrl,mqttPort);
                  while (!client.connected()){
                    Serial.println("Connecting to MQTT...");
                    if (client.connect(clientId,mqttUser, mqttPassword )) {
                      Serial.println("connected");
                    }else {
                      Serial.print("failed with state ");
                      Serial.print(client.state());
                      delay(2000);
                    }
                  }

                }


                //组数据帧并发送
                void mqttIntervalPost()
                {
                    char param[32];
                    char jsonBuf[128];
                      
                    sprintf(param, "{\"num8\":%d}", 9);
                    sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
                    
                    Serial.println(jsonBuf);
                    client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
                 
                   
                }


                void setup() {
                  Serial.begin(115200);
                  wifiInit();//连接wifi
                  mqttCheckConnect();//连接阿里云
                }
                 
                void loop() {
                  client.loop();
                 
                  if (millis() - lastMs >= 5000)
                    {//定时检查或上报数据
                        lastMs = millis();
                        mqttCheckConnect(); 
                        // 上报 
                        mqttIntervalPost();
                    }
                }

        
注意,如果只是用上面的代码,是不能成功的,还需要需改一些地方。
首先找到首选项里面的设置。
然后到相应找到C:\Users\Administrator\Documents\我的文档\Documents\Arduino\libraries。

在libraries文件夹里找到PubSubClient文件夹。

在PubSubClient文件夹里找到src文件夹。

在src文件夹里找到PubSubClient.h文件并打开。
修改相应参数。

修改两个宏:
MQTT_MAX_PACKET_SIZE 1024
MQTT_KEEPALIVE 60
在云平台里就可以看见发布的数据了。


(2)ESP8266