micropython——esp32对接阿里云物联网平台代码

esp32外接DHT11采集温湿度数据,上报到阿里云物联网平台,同时阿里云物联网平台向下控制esp32板子上LED灯的亮灭。ps:控制LED灯亮灭要在在线调试中发送json格式的数据

from machine import Pin
import dht
import time
import network
from umqtt import simple as mqtt
import _thread
import ujson
ALINK_PROP_SET_METHOD='thing.service.property.set'
led=Pin(2,Pin.OUT,value=0)
state = 0
def threadPublish():
  while True:
    time.sleep(2)
    d.measure()
    print(d.humidity())
    print(d.temperature())
    send_mseg={"params":{"Temperature":d.temperature(),"Humidity":d.humidity()},"method":"thing.service.property.set"}
    client.publish(topic=" ",msg=str(send_mseg),qos=1,retain=False)


def receiveMessage():
  while True:
    client.wait_msg()
#接收信息。接收到的信息是json格式,要进行解析。
def recvMessage(topic,msg):
  parsed=ujson.loads(msg)
  str=parsed["params"]
  print(str)
  print(type(parsed["params"]))
  print(str.get("PowerSwitch"))
  global state
  state=str.get("PowerSwitch")
  if state == 1:
    led.value(1)
    print("led on!") 
  if state == 0:
    led.value(0)
    print("led off!")
   
d=dht.DHT11(Pin(23))
wlan=network.WLAN(network.STA_IF)  
wlan.active(True)
wlan.connect('','')#连接WIFI
ProductKey=''
DeviceName=''
DeviceSecret=''
CLIENT_ID=''
user_name=''#用户名
user_password=''#用户密码
SERVER= ""#阿里云物联网平台地址
PORT=1883
client = mqtt.MQTTClient(client_id=CLIENT_ID, server=SERVER, port=PORT, user=user_name, password=user_password, keepalive=60)
client.connect()
client.set_callback(recvMessage)#设置回调函数
client.subscribe(" ")#订阅主题

while True:
  d.measure()
  print(d.humidity())
  print(d.temperature())
  send_mseg={"params":{"Temperature":d.temperature(),"Humidity":d.humidity()},"method":"thing.service.property.set"}
  client.publish(topic=" ",msg=str(send_mseg),qos=1,retain=False)
  time.sleep(2)
_thread.start_new_thread(receiveMessage,())#开启多线程
  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要通过ESP32阿里云物联网平台发布数据,需要先完成以下几个步骤: 1. 注册阿里云账号并开通IoT服务。 2. 创建一个设备,并获取设备的三元组信息,包括产品Key、设备名称和设备密钥。 3. 在ESP32上安装MQTT客户端库,比如PubSubClient,用于连接到阿里云物联网平台的MQTT服务器。 4. 在ESP32上编写代码,实现连接到MQTT服务器、发布数据的功能。 下面是一个简单的示例代码: ```cpp #include <WiFi.h> #include <PubSubClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqttServer = "your_MQTT_server"; const int mqttPort = 1883; const char* mqttUser = "your_MQTT_user"; const char* mqttPassword = "your_MQTT_password"; const char* productKey = "your_product_key"; const char* deviceName = "your_device_name"; const char* deviceSecret = "your_device_secret"; const char* topic = "/sys/" + String(productKey) + "/" + String(deviceName) + "/thing/event/property/post"; WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); mqttClient.setServer(mqttServer, mqttPort); mqttClient.setCallback(onMessageReceived); connectToMQTTServer(); } void loop() { mqttClient.loop(); publishData(); } void connectToMQTTServer() { while (!mqttClient.connected()) { String clientId = "esp32-" + String(random(0xffff), HEX); if (mqttClient.connect(clientId.c_str(), mqttUser, mqttPassword)) { Serial.println("Connected to MQTT server"); mqttClient.subscribe(topic.c_str()); } else { Serial.println("Failed to connect to MQTT server, retrying..."); delay(5000); } } } void publishData() { String data = "{\"id\":1,\"params\":{\"temperature\":25.0,\"humidity\":50.0},\"method\":\"thing.event.property.post\"}"; if (mqttClient.publish(topic.c_str(), data.c_str())) { Serial.println("Published data: " + data); } else { Serial.println("Failed to publish data"); } } void onMessageReceived(char* topic, byte* payload, unsigned int length) { Serial.println("Received message: " + String((char*)payload, length)); } ``` 在这个示例代码中,我们首先连接到WiFi网络,然后连接到阿里云物联网平台的MQTT服务器,并订阅设备的属性上报Topic。在主循环中,我们调用mqttClient.loop()函数来维持MQTT连接,并调用publishData()函数来发布数据。在publishData()函数中,我们构造一个JSON格式的数据,并调用mqttClient.publish()函数来发布数据。如果发布成功,就会在串口输出Published data:和数据内容;如果发布失败,就会输出Failed to publish data。 需要注意的是,我们在构造JSON格式的数据时,需要将设备的三元组信息和数据内容组合成一个符合阿里云物联网平台规范的JSON格式。具体格式可以参考阿里云物联网平台的API文档。 另外,需要注意的是阿里云物联网平台会对设备进行数据限流,最多支持每秒10条数据。如果需要发布更多的数据,可以考虑在设备端进行数据缓存和批量上报。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值