873浏览
查看: 873|回复: 1

[ESP8266/ESP32] ESP32-C6安全(SSL)MQTT服务点灯全套流程

[复制链接]
本帖最后由 HonestQiao 于 2024-4-9 23:38 编辑

在IoT物联网开发中,MQTT是不可或缺的一个好东西。通常情况下,我们会直接使用MQTT的1883端口进行连接,在一些对安全要求较高的场合,会需要使用基于TLS/SSL的安全连接。
下面就说一下在micropython中使用具体的步骤。

一、申请一个14天免费的只能用SSL连接的MQTT服务
申请网址:https://www.emqx.com/zh/cloud
ESP32-C6安全(SSL)MQTT服务点灯全套流程图1

注册后,直接新建一个部署,选择ServerLess即可:
ESP32-C6安全(SSL)MQTT服务点灯全套流程图2

最终得到一个开箱即用的安全MQTT服务:
ESP32-C6安全(SSL)MQTT服务点灯全套流程图3

然后到访问控制中,添加一个账号密码:
ESP32-C6安全(SSL)MQTT服务点灯全套流程图4

现在,可以使用你熟悉的MQTT客户端工具,如MQTTX来进行连接测试:
ESP32-C6安全(SSL)MQTT服务点灯全套流程图5

ESP32-C6安全(SSL)MQTT服务点灯全套流程图6

二、micropython编码
  1. <blockquote>import mqtt
复制代码


在上面的代码中,核心是ssl的设置:
  1. context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
  2. context.verify_mode = ssl.CERT_NONE
复制代码
简单起见,这里先分享不使用CA证书校验的方式,后续再分享使用证书校验。

另外,使用BLOCK_MODE设置是否阻塞模式,实际作用如下:
  • 阻塞模式:及时收到消息,但是程序会停在这里
  • 非租塞模式:检测的时候才会收到消息,但是程序不会停下


三、测试
用MQTTX或者其他客户端工具,如手机端的mqttdashboard,发送ON或者OFF到定义的主题即可:
ESP32-C6安全(SSL)MQTT服务点灯全套流程图7


运行mpy后,会收到消息,并根据消息ON、OFF来亮灭LED了
ESP32-C6安全(SSL)MQTT服务点灯全套流程图8



HonestQiao  初级技匠
 楼主|

发表于 2024-4-9 23:39:59

代码被吃了,重新发的试试:

  1. import mqtt
  2. import network
  3. import ssl
  4. import time
  5. import os
  6. from machine import Pin
  7. from umqtt.simple import MQTTClient
  8. wlan = network.WLAN(network.STA_IF)
  9. wlan.active(True)
  10. wlan.connect('WiFi名称', '密码')
  11. while not wlan.isconnected():
  12.     print("try connect...")
  13.     time.sleep(1)
  14. print("connect ok")
  15. CLIENT_ID = b'test_from_esp32c6'
  16. MQTT_SERVER = 'p52a5af8.ala.cn-hangzhou.emqxsl.cn'
  17. PORT = 8883
  18. USERNAME = b'esp32c6'
  19. PASSWORD = b'密码'
  20. TOPIC = b'esp32c6/test'
  21. BLOCK_MODE = True  # 是否使用阻塞模式
  22. context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
  23. context.verify_mode = ssl.CERT_NONE
  24. try:
  25.     client = MQTTClient(client_id=CLIENT_ID, # something unique to identify device, ie machine.unique_id()
  26.                         server= MQTT_SERVER,
  27.                         port=PORT, # if port ==0 AND ssl=True -> port=8883 the secure mqtt port
  28.                         user=USERNAME,
  29.                         password=PASSWORD,
  30.                         keepalive=7200,
  31.                         ssl=context
  32.                         )
  33.     client.connect()
  34.     print('Connected to %s MQTT Broker'%(MQTT_SERVER))
  35. except OSError as e:
  36.     print('Failed to connect to the MQTT Broker.')
  37.     time.sleep(5)
  38.     machine.reset()
  39.    
  40. def get_msg(topic, msg):
  41.     print(msg)
  42.     if msg == b'ON':
  43.         led.value(True)
  44.     elif msg == b'OFF':
  45.         led.value(False)
  46.    
  47.         
  48. led=Pin(15, Pin.OUT)
  49. client.set_callback(get_msg)
  50. client.subscribe(TOPIC)
  51. counter = 0
  52. while True:
  53.     try:
  54.         counter = counter + 1
  55.         print(counter)
  56.         if BLOCK_MODE:
  57.             client.wait_msg() # 阻塞
  58.         else:
  59.             client.check_msg() # 非租塞
  60.             time.sleep(1)
  61.     except Exception as e:
  62.         print(str(e))
  63.         time.sleep(2)
  64.         
  65.         print('reconnect!')
  66.         client.connect()
  67.         
  68.         # 断线之后要重新订阅
  69.         client.subscribe(TOPIC)
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail