MQTT&node-RED控制二軸云台-mpython

 MQTT&node-RED控制二軸云台-mpython

承接使用PWM控制伺服馬達-micropython這篇,透過node-red加入mqtt訂閱主題控制二軸云台
有一些感想紀錄下來,我發現其實像mqtt或者wifi連網,大都是固定一個寫法,其它不同的模組分為讀取數值或用數值受控制的元件,只要套用上去就可以。

首先主要是被控制的伺服馬達,所以先把它測試一下,參考這篇(點我

測試好之後,就可以開始加入wifi和mqtt了,但因為我用的是樹莓派建立的MQTT,所以這陪分前提是要有樹苺派,如何在樹苺派上建立Node-RED和MQTT,可以參考這篇(點我)。

Node-RED設定






程式碼

  1. from machine import SLEEP, Pin, PWM, freq
  2. from time import sleep
  3. from umqtttsimple import MQTTClient
  4. import binascii, micropython, network, time, socket, machine
  5.  
  6. ssid = "------------"
  7. password = "-------"
  8. mqtt_server = "192.168.210.22"
  9. #將客戶端ID轉換為16進位,以便MQTT伺服端讀取
  10. mqtt_id = binascii.hexlify(machine.unique_id())
  11.  
  12. #和Nord-RED上的主題一致
  13. client_servoPan = b'esp32/servoPan'
  14. client_servoTilt = b'esp32/servoTilt'
  15.  
  16. servo_pan = PWM(Pin(13), freq=50)
  17. servo_tilt = PWM(Pin(14), freq=50)
  18.  
  19.  
  20. #wifi連線
  21. def wifiConn():
  22.     wifi = network.WLAN(network.STA_IF)
  23.     wifi.active(True)
  24.     wifi.connect(ssid, password)
  25.     while wifi.isconnected() == False:
  26.         pass
  27.     print("Connected successful!")
  28.     print("IP: {}".format(wifi.ifconfig()))
  29.    
  30. #樹莓派上的mqtt回應訂閱
  31. # Duty 就為 2.5%、7.25%、12%,並 x1024 後可以轉換成 PWM Duty填入的數值
  32. def callBack(topic, msg):
  33.     ang0 = int(1023*0.025)
  34.     ang90 = int(1023*0.0725)
  35.     ang180 = int(1023*0.12)
  36.     print((topic, msg))
  37.     if topic == client_servoPan:
  38.         servo_pan.duty(int(msg))
  39.         sleep(0.5)
  40.     elif topic == client_servoTilt:
  41.         servo_tilt.duty(int(msg))
  42.         sleep(0.5)
  43.        
  44. #連線MQTT,連線成功後訂閱主題
  45. def connToMqtt():
  46.     try:
  47.         client = MQTTClient(mqtt_id, mqtt_server)
  48.         client.set_callback(callBack)
  49.         client.connect()
  50.         client.subscribe(client_servoPan)
  51.         client.subscribe(client_servoTilt)
  52.         print("connect to %s"%mqtt_server)
  53.         return client
  54.     #如果無法連線重新連線
  55.     except OSError as e:
  56.         print("not to connected for MQTT server!")
  57.         machine.reset()
  58. wifiConn()
  59. client = connToMqtt()
  60. while True:
  61.     #檢查有無進來的訊息
  62.     client.check_msg()



調過等待時間還是會偶爾抖動,雖然不知道抖動原在哪,先這樣好了,下次再來抓原因。





























留言

這個網誌中的熱門文章

使用PWM控制伺服馬達-micropython

DHT11+OLED+IFTTT+LINE-notity-micropython

BMP280氣壓,溫度模組-micropython