未來版MicroPython編程7:WiFi與物聯網

導入未來板庫

需要先導入未來板的庫才可以使用未來板的硬件。

from future import *

07: WiFi與物聯網

1. 連接WiFi

wifi.connect('router','password')

填寫WiFi網絡的登入資料,注意未來版只能連上2.4GHz的網絡。

2. 獲取網絡狀態

wifi.sta.isconnected()

成功連接網絡返回1,否則返回0。

3. 獲取網絡資料

wifi.sta.ifconfig()

返回一個列表,獲取連接中網絡的資訊。

列表內容:IP地址,網絡遮罩,閘道,域名。

4. 獲取MAC地址

import machine
import ubinascii

x = ubinascii.hexlify(machine.unique_id()).decode().upper()

取得未來版的獨特實體地址。

5. 檔案下載

wifi.download("url","name")

下載檔案到SD卡,url為檔案網網址,name為檔案名稱。

1~4使用範例

#/bin/python
from future import *

from time import sleep

import machine
import ubinascii

wifi.connect(str("name"), "pwd")
sleep(5)
if wifi.sta.isconnected():
  screen.clear()
  screen.text(str("IP: ")+str(wifi.sta.ifconfig()[0]),5,10,1,(0, 119, 255))
  screen.text("MAC Address: ",5,25,1,(0, 119, 255))
  screen.text(ubinascii.hexlify(machine.unique_id()).decode().upper(),5,35,1,(0, 119, 255))
  screen.text("Subnet Mask: ",5,50,1,(0, 119, 255))
  screen.text(wifi.sta.ifconfig()[1],5,60,1,(0, 119, 255))
  screen.text(str("Gateway: ")+str(wifi.sta.ifconfig()[2]),5,75,1,(0, 119, 255))
  screen.text(str("DNS: ")+str(wifi.sta.ifconfig()[3]),5,90,1,(0, 119, 255))

導入MQTT庫

import mqttsimple

使用MQTT與相關的功能前必須要導入MQTT庫。

5. 初始化MQTT

myMQTT = mqttsimple.MQTTClient(server,client_id,port=0,user=None,password=None,keepalive=0,ssl=False,ssl_params={})

這裡需要建立一個MQTTclient class的object,不是直接呼叫函數。

一般用家只需要注意server,client_id。

server為伺服器的地址,client_id為用戶名稱(一般可以任意填寫)。

假如你的伺服器需要登入,請在user和password裏填入登入資料。

6. 連接MQTT伺服器

myMQTT.connect()

7. 切斷MQTT連接

myMQTT.disconnect()

8. 訂閱MQTT話題

myMQTT.subscribe(topic=)

在topic填入話題的名稱。

9. 發佈信息到MQTT話題

myMQTT.publish(topic,msg)

在topic填入話題,msg填入訊息。

10. 讀取MQTT話題訊息

myMQTT.mqttRead(topic)

在topic填入話題的名稱。

11. 獲取已訂閱話題最後一則訊息

myMQTT.check_msg()

12. 等待直到已訂閱話題收到訊息

myMQTT.wait_msg()

13. 設定MQTT讀取訊息觸發函數

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

myMQTT.set_callback(myFunction())

MQTT範例程序1:使用返回值獲取信息

import mqttsimple
if not(wifi.sta.isconnected()):
    wifi.connect('router', 'password') 

c = mqttsimple.MQTTClient("myServer", 'myID')
c.connect() 

c.subscribe('/topic1')

x= 0
# mqttRead()會不斷讀取訊息,假如話題沒有新的信息則會返回None。
while 1:
    if sensor.btnValue('a'):
        x+=1
        c.publish('/topic1','x'+str(x))
        sleep(0.2)
    # 假如讀取的訊息不是None,就顯示訊息。
    mqttT = c.mqttRead('/topic1')
    if mqttT:
        print(mqttT)

MQTT範例程序2:使用函數觸發使用MQTT

import mqttsimple
if not(wifi.sta.isconnected()):
    wifi.connect('router', 'password') 

c = mqttsimple.MQTTClient("myServer", 'myID')
c.connect() 

# 設置觸發函數,假如話題有信息更新就會自動觸發
def sub_cb(topic, msg):
    print((topic, msg))   
c.set_callback(sub_cb)
    
c.subscribe('/ttt')

while 1:
    if sensor.btnValue('a'):
        c.publish('/ttt', 'hello')
        sleep(0.2)
    # 獲取已訂閱話題最後一則訊息
    c.check_msg()

# 你亦可以試試等待直到已訂閱話題收到訊息
# c.wait_msg()