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


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

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

提示沒有連接,點那個紅色按鈕創建一個連接:

前兩項都是隨便填的,值得注意的的是那個Broker Web/IP Address,這個最好自己架個服務器,而不是用我填的這個測試用服務器,當然這里做個例子,先用這個湊數了,填完后點那個CREATE:

可以看到名為”測試連接“的項目建成了。然后點近去:

 

這理解釋下:Topic可以理解為一個通道,比如開關,按下后會往ledctl這個通道里發ledon這個信息,再按一下會往ledctl通道里發ledoff這個信息,最終界面如下:

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

首先,下載micropython的MQTT庫:

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

下找到:umqtt.simple

這個目錄下有幾個例子,以及一個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)

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM