uPyCraft-micropython教程(dfrobot MQTT实现单向远程控制)

2017-07-091.9万
AI 快速预览详细 收起
本教程介绍了如何使用uPyCraft和micropython通过MQTT协议实现两个FireBeetle-ESP32设备之间的单向远程控制。首先需要注册物联网平台账号并创建设备,记录必要的参数。然后在lib目录下创建umqtt目录,并将simple.py文件拖动到该目录下完成库的烧录。接下来,分别编写设备A和设备B的代码,注意替换SSID、PASSWORD、username、password、CLIENT_ID和TOPIC等参数。设备A订阅主题并接收来自设备B的开关指令,设备B则定时发送开关指令。最终,设备A的LED灯会根据接收到的指令每3秒闪烁一次。
MQTT简介

原料:
   硬件平台:FireBeetle-ESP32 x2
   软件平台:uPyCraft 0.21
   物联网平台:https://iot.dfrobot.com.cn(这是dfrobot的建议物联网,后面我们会在上面增加更多有趣功能)

假定一个ESP32是设备A,另一个ESP32是设备B, 我们要实现的功能
B定时向A发送开灯关灯命令,间隔三秒

开始干活
第一步:注册物联网网站账号,https://iot.dfrobot.com.cn
  这里需要填入邮箱地址,后期使用邮箱地址登录,注册很简单,这里就不上图了。
第二步:创建设备,记录user password clientid topic,要替换到程序中去

  uPyCraft-micropython教程(dfrobot MQTT实现单向远程控制)图1
第三步:在lib目录下创建umqtt目录,再将uPy_lib/umqtt目录下的simple.py拖动到lib/umqtt目录下,完成库的烧录(设备A和设备B都要做此操作)
新建目录   uPyCraft-micropython教程(dfrobot MQTT实现单向远程控制)图2
输入新建的目录名称umqtt
uPyCraft-micropython教程(dfrobot MQTT实现单向远程控制)图4
创建成功
uPyCraft-micropython教程(dfrobot MQTT实现单向远程控制)图3

第四部:下载并运行代码


  设备A执行下面程序(注意替换SSID PASSWORD【路由器相关】,username【网站账户】,password【网站密码】,CLIENT_ID【刚记录的clientID后面加个2】,TOPIC【刚记录的TOPIC】)
[mw_shl_code=python,true]from umqtt.simple import MQTTClient
from machine import Pin,Timer
import network
import time

SSID="DFROBOT_AP"
PASSWORD="12345678"

led=Pin(2, Pin.OUT, value=0)

SERVER = "182.254.130.180"
CLIENT_ID = "S1grx_VmNW2"
TOPIC_LEDA = b"B1rl_47NZ"
username='H1UGxqD4-'
password='BkeLGeqvVb'
state = 0
def sub_cb(topic, msg):
    global state
    print((topic, msg))
    if msg == b"on":
            led.value(0)
            state = 0
            print("1")
    elif msg == b"off":
            led.value(1)
            state = 1
            print("0")
    elif msg == b"toggle":
            # LED is inversed, so setting it to current state
            # value will make it toggle
            led.value(state)
            state = 1 - state
def connectWifi(ssid,passwd):
  global wlan
  wlan=network.WLAN(network.STA_IF)
  wlan.active(True)
  wlan.disconnect()
  wlan.connect(ssid,passwd)
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)

connectWifi(SSID,PASSWORD)
server=SERVER
c = MQTTClient(CLIENT_ID, server,0,username,password)
c.set_callback(sub_cb)
c.connect()
c.subscribe(TOPIC_LEDA)
print("Connected to %s, subscribed to %s topic" % (server, TOPIC_LEDA))
try:
  while 1:
    c.wait_msg()
finally:
  c.disconnect()
[/mw_shl_code]


  设备B执行下面程序(注意替换SSID PASSWORD【路由器相关】,username【网站账户】,password【网站密码】,CLIENT_ID【刚记录的clientID后面加个1】,TOPIC_LEDB【刚记录的TOPIC】)
[mw_shl_code=python,true]from umqtt.simple import MQTTClient
from machine import Pin,Timer
import network
import time

SSID="DFROBOT_AP"
PASSWORD="12345678"

led=Pin(2, Pin.OUT, value=0)
tim = Timer(-1)

SERVER = "182.254.130.180"
CLIENT_ID = "S1grx_VmNW2"
TOPIC_LEDA = b"B1rl_47NZ"
username='H1UGxqD4-'
password='BkeLGeqvVb'

def connectWifi(ssid,passwd):
  global wlan
  wlan=network.WLAN(network.STA_IF)
  wlan.active(True)
  wlan.disconnect()
  wlan.connect(ssid,passwd)
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)

connectWifi(SSID,PASSWORD)
server=SERVER
c = MQTTClient(CLIENT_ID, server,0,username,password)
c.connect()
print("Connected to %s, publish message to %s topic" % (server, TOPIC_LEDA))
try:
  while 1:
    c.publish(TOPIC_LEDA,b'on')
    time.sleep(3)
    c.publish(TOPIC_LEDA,b'off')
    time.sleep(3)
finally:
  c.disconnect()
[/mw_shl_code]


第五步:运行设备A程序,运行设备B程序。A每3秒向B发送一次开关指令,B的led灯不停的闪烁





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
Forgotten
Forgotten
楼主,a程序里面 收到on应该对应led.value(1) ,off对应led.value(0)
还以为出问题了
Forgotten
Forgotten回复秦皇岛岛主
用的是板载led灯
秦皇岛岛主
秦皇岛岛主
作者
回复Forgotten
和你的引脚上led接的方向有关
super-power
super-power
做成了,我只用了A程序,通过网站发字符串控制灯,不过A程序的on后面的值要改成1和off后面的值要改成0,另外我没有在client_id后面加2,请问岛主,为什么要在id后面+2或者+1?
秦皇岛岛主
秦皇岛岛主
作者
回复super-power
随便填个数就行
super-power
super-power回复秦皇岛岛主
df物联网站id总在刷新,程序里面的id也要跟着变吗?如果不变,是不是可以随便写个数字代替id?
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
- 没有更多了 -