ESP32运行MicroPython通过MQTT上报温湿度到腾讯云

目录

腾讯云创建产品和设备

MQTT.fx模拟设备接入

ESP32设备连接到腾讯云


腾讯云创建产品和设备

1、物联网通信

2、创建产品

3、创建设备

产品列表---》设备列表---》添加新设备

4、设备信息

上面的client id 、mqtt usernme、mqtt password都是我们需要用到的。

除了上面3个参数,还需要知道Broker Address和Broker Port,根据腾讯官方的资料Broker Address和Broker Port分别是如下格式的:

Broker Address:PRODUCT_ID.iotcloud.tencentdevices.com

Broker Port:1883

5、订阅和发布主题

产品列表---》设备列表---》权限列表,可以看到如下3个主题:

MQTT.fx模拟设备接入

1、配置客户端

2、建立连接

 3、订阅和发布主题

订阅成功之后,如下面的显示:

上报数据:Publish(发布)

腾讯云日志查看:

 下发数据:设备列表---》点进相应的设备里面---》在线调试

客户端查看:

ESP32设备连接到腾讯云 

1、创建产品

创建产品和设备、客户端参数的生成和上面一样的方法;创建一个温湿度上报到腾讯云的产品和设备。

2、MQTT库

ESP32需要使用到MQTT库,使用网上开源的umqtt:https://github.com/micropython/micropython-lib/blob/master/umqtt.simple/umqtt/simple.py需要把这个文件导入到ESP32中。

3、温湿度

MicroPython本身内置了dht模块,支持DHT11、DHT22。

4、硬件连接

VCC <------>3V3

GND<------>GND

DAT <------>G4

5、脚本编写

程序设计:

定义了4个函数:ConnectWifi(ssid,passwd)用于连接wifi,ReadTemHum()用于读取温湿度,

sub_cb(topic, msg)订阅主题回调,apptimerevent(mytimer)定时器回调函数。

from umqtt.simple import MQTTClient
from machine import Pin
import network
import time
import machine
import dht
from machine import Timer

SSID="*********"
PASSWORD="**********"

SERVER ='LGSODS81VJ.iotcloud.tencentdevices.com'  #MQTT Server: LGSODS81VJ.iotcloud.tencentdevices.com
CLIENT_ID = "LGSODS81VJESP32Devcice1"   #设备ID
#PORT=1883
username='LGSODS81VJESP32Devcice1;12010126;C2PYL;1622167250'
password='ecd65158e4c9cdbfe48d116ca08ff069589f305936d8748fee269396207b01f8;hmacsha256'

publish_TOPIC = 'LGSODS81VJ/ESP32Devcice1/data'
subscribe_TOPIC ='LGSODS81VJ/ESP32Devcice1/data'

client=None
mydht=None

def sub_cb(topic, msg):
    print((topic, msg))

def connectWifi(ssid,passwd):
    global wlan
    wlan=network.WLAN(network.STA_IF)         #create a wlan object
    wlan.active(True)                         #Activate the network interface
    wlan.disconnect()                         #Disconnect the last connected WiFi
    wlan.connect(ssid,passwd)                 #connect wifi
    while(wlan.ifconfig()[0]=='0.0.0.0'):
        time.sleep(1)
    print(wlan.ifconfig())

def apptimerevent(mytimer):
    try:
        sensordata=ReadTemHum()
        mymessage='{"CurrentTemperature": %d ,"CurrentHumidity": %d }'%(sensordata[0],sensordata[1])
        client.publish(topic=publish_TOPIC,msg= mymessage, retain=False, qos=0)
    except Exception as ex_results2:
        print('exception',ex_results2)
        mytimer.deinit()
#     finally:
#         machine.reset()
# 
# #Catch exceptions,stop program if interrupted accidentally in the 'try'
def ReadTemHum():
    mydht.measure()
    tem=mydht.temperature()
    hum=mydht.humidity()
    data=[tem,hum]
    print(data)
    
    return data
    
if __name__=='__main__':
    try:
        mydht=dht.DHT11(machine.Pin(4))
        connectWifi(SSID,PASSWORD)
        client = MQTTClient(CLIENT_ID, SERVER,0,username,password,60)     #create a mqtt client
        print(client)
        client.set_callback(sub_cb)                         #set callback
        client.connect()                                    #connect mqtt
        client.subscribe(subscribe_TOPIC)                   #client subscribes to a topic
        mytimer=Timer(0)
        mytimer.init(mode=Timer.PERIODIC, period=5000,callback=apptimerevent)
        while True:
            client.wait_msg()                            #wait message
            
    except Exception  as ex_results:
        print('exception1',ex_results)
    finally:
        if(client is not None):
            client.disconnect()
        wlan.disconnect()
        wlan.active(False)

 数据以JSON格式上传:

        mymessage='{"CurrentTemperature": %d ,"CurrentHumidity": %d }'%(sensordata[0],sensordata[1])

产品列表---》设备---》云日志---》内容日志---》可以查看上报的数据

接收数据:

在行为日志里面可以看到,设备发送到平台的,平台发送到设备的:

 

                                                                              ——————END——————

  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
首先,需要连接 DHT11 传感器到 Arduino 板子上,并编写一个 Arduino 程序来获取温湿度数据并将其上传到 MQTT 服务器。以下是一个示例程序: ```C++ #include <Adafruit_Sensor.h> #include <DHT.h> #include <WiFi.h> #include <PubSubClient.h> // Replace with your Wi-Fi credentials const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // Replace with your MQTT broker IP address const char* mqtt_server = "your_MQTT_broker_IP"; // DHT11 sensor pin #define DHTPIN 5 // Uncomment the type of sensor in use #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); dht.begin(); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); client.setServer(mqtt_server, 1883); while (!client.connected()) { Serial.println("Connecting to MQTT..."); if (client.connect("ESP32Client")) { Serial.println("Connected to MQTT"); } else { Serial.print("Failed with state "); Serial.print(client.state()); delay(2000); } } } void loop() { delay(2000); float temperature = dht.readTemperature(); float humidity = dht.readHumidity(); if (isnan(humidity) || isnan(temperature)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.print("Temperature: "); Serial.print(temperature); Serial.print(" °C\tHumidity: "); Serial.print(humidity); Serial.println(" %"); char temp[10]; dtostrf(temperature, 6, 2, temp); char hum[10]; dtostrf(humidity, 6, 2, hum); client.publish("temperature", temp); client.publish("humidity", hum); } ``` 在这个程序中,我们使用了 Adafruit 的 DHT 库来读取温湿度传感器。我们还使用了 WiFi 库和 PubSubClient 库来连接到 WiFi 和 MQTT 服务器。 在 `setup()` 函数中,我们首先连接到 Wi-Fi 网络,然后连接到 MQTT 服务器。如果连接失败,我们会等待 2 秒钟并重试。 在 `loop()` 函数中,我们读取温湿度数据并将其上传到 MQTT 服务器。我们使用 `client.publish()` 函数来发布温度和湿度数据到名为 "temperature" 和 "humidity" 的 MQTT 主题。 请注意,我们使用了 `dtostrf()` 函数将浮点数转换为字符数组,以便将其发布到 MQTT 主题。 现在,我们需要在 MQTT 服务器上创建一个名为 "temperature" 和 "humidity" 的主题,并订阅它们以接收数据。 希望这个示例程序能够帮助你上传 DHT11 温湿度数据到 MQTT 服务器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值