MicroPython入坑記(四)利用MQTT實現0編程遠程控制(下)(用安卓手機)

先介紹下這個APP(ioT MQTT Panel)怎麼用:python

安裝我就不怎麼說了,安裝完打開軟件是這個樣子的:git

提示沒有鏈接,點那個紅色按鈕建立一個鏈接:github

前兩項都是隨便填的,值得注意的的是那個Broker Web/IP Address,這個最好本身架個服務器,而不是用我填的這個測試用服務器,固然這裏作個例子,先用這個湊數了,填完後點那個CREATE:服務器

能夠看到名爲」測試鏈接「的項目建成了。而後點近去:函數

 

這理解釋下:Topic能夠理解爲一個通道,好比開關,按下後會往ledctl這個通道里發ledon這個信息,再按一下會往ledctl通道里發ledoff這個信息,最終界面以下:測試

下面,咱們在MicroPython裏邊編寫一點程序,用來接收這個界面發出的消息:ui

首先,下載micropython的MQTT庫:spa

https://github.com/micropython/micropython-lib3d

下找到:umqtt.simplecode

這個目錄下有幾個例子,以及一個umqtt的目錄(裏邊的simple.py就是庫了)

吧simple.py庫拷進ESP8266:

而後新建一個ledctl.py內容以下:

import time
from simple import MQTTClient

def sub_cb(topic, msg):   #回調函數,收到服務器消息後會調用這個函數
    print(topic, msg)

c = MQTTClient("umqtt_client", "test.mosquitto.org") #創建一個MQTT客戶端
c.set_callback(sub_cb) #設置回調函數
c.connect() #創建鏈接
c.subscribe(b"ledctl") #監控ledctl這個通道,接收控制命令
while True:
    c.check_msg()
    time.sleep(1)

 

而後點手機上的開關,在終端會收到以下信息:

好了,咱們的ESP8266收到了手機發來的消息!

而後改寫代碼控制LED(個人板子上的LED爲GPIO2)

import time
from simple import MQTTClient
from machine import Pin

led=Pin(2,Pin.OUT)

def sub_cb(topic, msg):
    print(topic, msg)
    if topic==b'ledctl':
        if msg==b'ledon':
            led.off() #由於實際IO爲0ff時燈是亮的
        if msg==b'ledoff':
            led.on()

c = MQTTClient("umqtt_client", "test.mosquitto.org")
c.set_callback(sub_cb)
c.connect()
c.subscribe(b"ledctl")
while True:
    c.check_msg()
    time.sleep(1)

運行代碼,發現手機能夠正常控制燈的亮滅了

再寫代碼讓第二個LED控件顯示LED的狀態:

import time
from simple import MQTTClient
from machine import Pin

led=Pin(2,Pin.OUT)

def sub_cb(topic, msg):
    print(topic, msg)
    if topic==b'ledctl':
        if msg==b'ledon':
            led.off()
        if msg==b'ledoff':
            led.on()

c = MQTTClient("umqtt_client", "test.mosquitto.org")
c.set_callback(sub_cb)
c.connect()
c.subscribe(b"ledctl")
while True:
    c.check_msg()
    if led.value()==1:
        c.publish('ledstatus','ledoff')
    if led.value()==0:
        c.publish('ledstatus','ledon')
    time.sleep(1)

 

  

相關文章
相關標籤/搜索