国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

我如何用 CircuitPython 和開源工具監控溫室

開發 后端 開源
CircuitPython 提供了一種和微控制器板進行交互的革命性方式。這篇文章介紹了如何使用 CircuitPython 來監測溫室的溫度、濕度以及環境光,并且使用 CircuitPython MQTT 客戶端將結果發布到一個 MQTT 中介。

[[406443]]

使用微控制器、傳感器、Python 以及 MQTT 持續追蹤溫室的溫度、濕度以及環境光。

CircuitPython 提供了一種和微控制器板進行交互的革命性方式。這篇文章介紹了如何使用 CircuitPython 來監測溫室的溫度、濕度以及環境光,并且使用 CircuitPython MQTT 客戶端將結果發布到一個 MQTT 中介broker。你可以在若干個程序中訂閱 MQTT 隊列并進一步處理信息。

這個項目使用一個簡單的 Python 程序來運行 Web 服務器,它發布一個 Prometheus 格式的采集端點,拉取監控指標到 Prometheus 進行不間斷的監控。

關于 CircuitPython

CircuitPython 是一個由 Adafruit 創建的開源 Python 發行版,用于運行在低成本微控制器開發板上。CircuitPython 為與 兼容的開發板 的交互提供了簡單的開發體驗。你可以在連接你的開發板時掛載的 CIRCUITPYTHON 根驅動器上創建一個 code.py 文件來啟動你的程序。CircuitPython 還為開發板提供了一個串行連接,包含一個交互式解釋器(REPL)會話,你可以使用 Python 代碼實時和開發板進行交互。

Adafruit 的網站提供了大量的文檔,可以幫助你開始使用 CircuitPython。首先,參考下《歡迎來到 CircuitPython》指南。這份指南能夠幫助你開始使用 CircuitPython 在開發板上運行代碼以及和 REPL 交互。它還記錄了如何安裝 Adafruit 的 CircuitPython 庫合集和范例,可以用在它出售的許多開發板和傳感器上。接下來,閱讀《CircuitPython 基礎》指南來學習更多關于其功能的信息,里面還有鏈接指向在特定及兼容的開發板上使用 CircuitPython 的相關信息。最后,就如所有開源軟件一樣,你可以深入 CircuitPython 的源碼,發布議題,以及做出貢獻。

微控制器設置

微控制器系統非常簡單。要完成這個示例項目,你會需要:

  • 樹莓派 4:你需要一臺電腦來給微控制器系統編程,我用的是樹莓派 4。
  • CircuitPython 兼容的微控制器:我用的是 Adafruit Feather S2,帶有內置 WiFi,環境光傳感器,Qwiic 線纜輸入。
  • 微控制器 WiFi:Feather S2 內置了 WiFi。如果你的微控制器沒有,你需要給開發板找個 WiFi 擴展板。
  • 傳感器:Feather S2 有個內置的環境光傳感器,所以我還需要一個溫濕度傳感器。有很多不同廠商的產品可以選擇,包括 Adafruit、SparkFun、亞馬遜。我用的是一個 Adafruit 傳感器,帶有 Feather S2 輸入兼容的 Qwiic 線纜。盡管多數 SparkFun 傳感器可以在 Adafruit 庫下工作,但如果你不是從 Adafruit 購買的傳感器,你可能還是需要自己去找到它兼容 CircuitPython 的 Python 庫。
  • 跳線和線纜:為了避免使用面包板或焊接,我使用 Adafruit Qwiic 線纜。SparkFun 銷售的包含不同長度的線纜套裝中也有它。

在將微控制器連接到你的電腦之前,將傳感器連接到微控制器上。

 

將傳感器連接到微控制器上

現在你可以將微控制器用 USB 數據線連接到你的電腦。

MQTT 中介

你可以使用 這份說明 來在樹莓派的系統上安裝 Mosquitto MQTT 中介 和 Mosquitto 客戶端。如果你想把樹莓派做為長期服務器使用,在你的網絡上給樹莓派 4 設置一個靜態 IP 地址。Mosquitto 中介運行起來之后,創建一份 用戶名/密碼文件,設置客戶端向中介發布和訂閱消息時用的認證信息。

你可以用樹莓派上的 Mosquitto 客戶端來測試 MQTT 中介。打開兩個終端(如果你是無界面運行的話打開兩個 SSH 會話):

在終端一輸入:

  1. mosquitto_sub -h localhost -u $user -P $pass -t "mqtt/test"

這條命令會啟動一個持續運行的進程,監聽發布到 mqtt/test 隊列的消息。

在終端二輸入:

  1. mosquitto_pub -h localhost -u $user -P $pass -t "mqtt/test" -m hello`

這條命令會向 mqtt/test 隊列發布一條消息,它應該會顯示在終端一的輸出里。

現在你可以中止終端一運行的 sub 命令了。

Mosquitto 中介允許客戶端發布消息到任何隊列,甚至沒有任何訂閱的隊列也可以。這些消息會永久丟失,但這不會阻止客戶端繼續發布消息。

打開第三個終端,訂閱下列隊列(你的控制器會發布消息到這些隊列上):

  • greenhouse/temperature
  • greenhouse/light
  • greenhouse/humidity

給微控制器編碼

現在你已經準備好給微控制器編碼,發布它的監測指標到樹莓派 4 上運行的 MQTT 中介上了。

Adafruit 有 出色的文檔,指導你使用 CircuitPython 庫合集 的庫來將你的微控制器連接到 WiFi 路由器,并發布監測指標到 MQTT 中介上。

安裝下列庫到 CIRCUITPYTHON/lib 目錄,溫室監控會用到它們。這些庫在 Adafruit 的 CircuitPython 庫合集中都有提供:

  • adafruit_bus_device:一個帶有多個 .mpy 文件的 Python 包文件夾(.mpy 是經過壓縮的 Python 文件,用以節省空間)
  • adafruit_requests:單個 .mpy 文件
  • adafruit_register:一個包文件夾
  • adafruit_minimqtt:一個包文件夾
  • adafruit_si7021:單個 .mpy 文件,用來支持溫濕度傳感器

庫裝好了之后,將以下代碼寫入 CIRCUITPYTHON 文件夾的 code.py 文件中:

  1. import time
  2. import ssl
  3. import socketpool
  4. import wifi
  5. import adafruit_minimqtt.adafruit_minimqtt as MQTT
  6. import board
  7. from digitalio import DigitalInOut, Direction, Pull
  8. from analogio import AnalogIn
  9. import adafruit_si7021
  10.  
  11. # Add a secrets.py to your filesystem that has a dictionary called secrets with "ssid" and
  12. # "password" keys with your WiFi credentials. DO NOT share that file or commit it into Git or other
  13. # source control.
  14. # pylint: disable=no-name-in-module,wrong-import-order
  15. try:
  16.         from secrets import secrets
  17. except ImportError:
  18.         print("WiFi secrets are kept in secrets.py, please add them there!")
  19.         raise
  20.  
  21. print("Connecting to %s" % secrets["ssid"])
  22. wifi.radio.connect(secrets["ssid"], secrets["password"])
  23. print("Connected to %s!" % secrets["ssid"])
  24. ### Feeds ###
  25. light_feed = "greenhouse/light"
  26. temp_feed = "greenhouse/temperature"
  27. humidity_feed = "greenhouse/humidity"
  28.  
  29. # Define callback methods which are called when events occur
  30. # pylint: disable=unused-argument, redefined-outer-name
  31. def connected(client, userdata, flags, rc):
  32.         # This function will be called when the client is connected
  33.         # successfully to the broker.
  34.         print("Connected to MQTT!")
  35.  
  36. def disconnected(client, userdata, rc):
  37.         # This method is called when the client is disconnected
  38.         print("Disconnected from MQTT!")
  39.  
  40.  
  41. def get_voltage(pin):
  42.         return (pin.value * 3.3) / 65536
  43.  
  44. # Create a socket pool
  45. pool = socketpool.SocketPool(wifi.radio)
  46.  
  47. # Set up a MiniMQTT Client
  48. mqtt_client = MQTT.MQTT(
  49.         broker=secrets["broker"],
  50.         port=secrets["port"],
  51.         username=secrets["aio_username"],
  52.         password=secrets["aio_key"],
  53.         socket_pool=pool,
  54.         ssl_context=ssl.create_default_context(),
  55. )
  56.  
  57. # Setup the callback methods above
  58. mqtt_client.on_connect = connected
  59. mqtt_client.on_disconnect = disconnected
  60.  
  61. # Connect the client to the MQTT broker.
  62. print("Connecting to MQTT...")
  63. mqtt_client.connect()
  64.  
  65. # Create library object using our Bus I2C port
  66. sensor = adafruit_si7021.SI7021(board.I2C())
  67. light_pin = AnalogIn(board.IO4)
  68.  
  69. while True:
  70.         # Poll the message queue
  71.         mqtt_client.loop()
  72.  
  73.         # get the current temperature
  74.         light_val = get_voltage(light_pin)
  75.         temp_val = ((sensor.temperature * 9)/5) + 32
  76.         humidity_val = sensor.relative_humidity
  77.  
  78.         # Send a new messages
  79.         mqtt_client.publish(light_feed, light_val)
  80.         mqtt_client.publish(temp_feed, temp_val)
  81.         mqtt_client.publish(humidity_feed, humidity_val)
  82.         time.sleep(0.5)

保存你的代碼。然后連接到串行監視器,看程序連接到你的 MQTT 中介。你還可以將樹莓派 4 上的終端切換到訂閱了它的發布隊列的終端來查看輸出。

處理監測指標

像 MQTT 這樣的發布/訂閱工作流給微控制器系統提供了諸多好處。你可以有多個微控制器 + 傳感器來回報同一個系統的不同指標或并行回報相同指標的若干讀數。你還可以有多個不同進程訂閱各個隊列,并行地對這些消息進行回應。甚至還可以有多個進程訂閱相同的隊列,對消息做出不同的動作,比如數值過高時發送通知郵件或將消息發送到另一個 MQTT 隊列上去。

另一個選項是讓一個微控制器訂閱一個外部隊列,可以發送信號告訴微控制器做出動作,比如關閉或開始一個新會話。最后,發布/訂閱工作流對低功耗微控制器系統更佳(比如那些使用電池或太陽能的系統),因為這些設備可以在更長的延遲周期后批量發布監測指標,并在回報的間隔期間關閉大量消耗電量的 WiFi 廣播。

要處理這些監測指標,我創建了一個 Python 客戶端,使用 Paho Python MQTT 客戶端 訂閱監測指標隊列。我還使用官方的 Prometheus Python 客戶端 創建了一個 Web 服務器,它產生一個符合 Prometheus 標準的采集端點,使用這些監測指標作為面板信息。Prometheus 服務器和 Mosquitto MQTT 中介我都是運行在同一個樹莓派 4 上的。

  1. from prometheus_client import start_http_server, Gauge
  2. import random
  3. import time
  4. import paho.mqtt.client as mqtt
  5.  
  6. gauge = {
  7.   "greenhouse/light": Gauge('light','light in lumens'),
  8.   "greenhouse/temperature": Gauge('temperature', 'temperature in fahrenheit'),
  9.   "greenhouse/humidity": Gauge('humidity','relative % humidity')
  10. }
  11.  
  12. try:
  13.         from mqtt_secrets import mqtt_secrets
  14. except ImportError:
  15.         print("WiFi secrets are kept in secrets.py, please add them there!")
  16.         raise
  17.  
  18. def on_connect(client, userdata, flags, rc):
  19.         print("Connected with result code "+str(rc))
  20.         # Subscribing in on_connect() means that if we lose the connection and
  21.         # reconnect then subscriptions will be renewed.
  22.         client.subscribe("greenhouse/light")
  23.         client.subscribe('greenhouse/temperature')
  24.         client.subscribe('greenhouse/humidity')
  25.  
  26. def on_message(client, userdata, msg):
  27.         topic = msg.topic
  28.         payload = msg.payload
  29.         gauge[topic].set(payload)
  30.  
  31. client = mqtt.Client()
  32. client.username_pw_set(mqtt_secrets["mqtt_user"],mqtt_secrets['mqtt_password'])
  33. client.on_connect = on_connect
  34. client.on_message = on_message
  35. client.connect('localhost',1883,60)
  36.  
  37. if __name__ == '__main__':
  38.         # Start up the server to expose the metrics.
  39.  
  40.         client = mqtt.Client()
  41.         client.username_pw_set('london','abc123')
  42.         client.on_connect = on_connect
  43.         client.on_message = on_message
  44.         client.connect('localhost',1883,60)
  45.  
  46.         start_http_server(8000)
  47.         client.loop_forever()

然后我配置 Prometheus 服務器采集端點數據到 localhost:8000。

你可以在 Github 上訪問 溫室 MQTT 微控制器 這個項目的代碼,項目采用 MIT 許可證授權。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2013-03-04 11:14:24

云服務監測云安全監測云安全

2020-12-02 13:19:47

Shell監控文件Linux

2011-03-23 09:05:40

Nagios監控

2022-02-25 11:51:11

KubeScrape開源監控工具

2023-04-14 08:21:55

2016-04-18 10:45:22

Dr. ElephanHadoop性能監控

2023-08-20 16:51:28

Kubernetes開源工具

2017-06-13 16:07:21

開源網絡監控服務器

2020-05-03 12:50:19

開源監控工具網絡監控開源

2019-11-01 09:00:00

Kubernetes開源監控工具

2009-03-31 16:41:38

網絡性能網絡監控開源

2011-09-02 09:51:21

2020-04-13 09:34:24

開源監控工具

2010-06-28 13:35:15

ITIL監控工具

2017-05-02 13:38:51

CSS繪制形狀

2015-04-14 09:26:13

網絡流量監控vnStatvnStati

2022-07-24 14:51:31

開源游戲RPG 游戲

2020-11-09 06:51:46

開源工具開源

2021-07-09 05:24:24

云監控工具開源云平臺

2021-03-22 11:10:09

Redis架構MQ
點贊
收藏

51CTO技術棧公眾號

天然素人一区二区视频| 粉嫩av一区二区| 婷婷久久免费视频| 精品亚洲porn| 狠久久av成人天堂| 欧美日韩综合视频网址| 国产精品久久久久久久久久久不卡 | 韩日毛片在线观看| 新狼窝色av性久久久久久| 欧美一区二区三区思思人| 日韩电影免费观看在| 华人av在线| 欧美群妇大交群中文字幕| 三级三级久久三级久久18| 人成在线免费网站| 成人一级片在线观看| 欧美丰满片xxx777| 四虎最新地址发布| 亚洲一区欧美| 日韩一卡二卡三卡| 精品无码一区二区三区在线| 精品一区二区三区中文字幕| 亚洲乱码日产精品bd| 国产欧美日韩精品在线观看| 日韩美女网站| 国产综合一区二区| 欧美精品www| 四色成人av永久网址| 一二三区不卡| 国产精品小说在线| 免费在线看电影| 2020日本不卡一区二区视频| 热久久99这里有精品| 丁香婷婷在线观看| 精品无码三级在线观看视频| 手机在线视频你懂的| 亚洲精品亚洲人成在线| 欧美精品v日韩精品v韩国精品v| 中文字幕色呦呦| 国产精品嫩草影院在线看| 欧美日韩精品三区| 在线看三级电影| 国产精品久久久久久久午夜片| 亚洲最大福利视频| 在线人成日本视频| 国产精品久久三区| 久久久久无码国产精品一区| 国产精品久久久久久久久久辛辛 | 粉嫩aⅴ一区二区三区四区| 久久久久久久久久婷婷| 麻豆国产一区| 91精品国产综合久久香蕉922| 日韩视频不卡| 国产+成+人+亚洲欧洲| av在线三区| 久久精品夜夜夜夜久久| 日韩亚洲一区在线播放| 不卡一区二区三区四区| 国产区亚洲区欧美区| 99riav1国产精品视频| 欧美一二三不卡| 在线不卡欧美| 日本精品中文字幕| 午夜精品久久久久久久久久蜜桃| 欧美日韩国产在线| 人妻丰满熟妇av无码区app| 老司机精品视频网站| 国产成人精品一区| 精品亚洲a∨| 在线播放中文字幕一区| 天天干夜夜干| 97精品电影院| 色综合电影网| 久久久久久亚洲综合| 黄色av网站在线免费观看| 欧美国产激情一区二区三区蜜月| 亚洲国产精品一区在线观看不卡| 日韩黄色大片| 久久亚洲影音av资源网| 麻豆蜜桃在线观看| 欧美在线视频a| 久久久久中文| 91精品视频观看| 99re8这里有精品热视频8在线 | 久久这里只有精品8| 一区二区三区在线观看免费| 亚洲综合五月天| 在线中文字幕第一区| 波多野结衣 作品| 五月天一区二区| 国产美女视频黄a视频免费| www.亚洲精品| 欧美中日韩在线| 欧美视频一二三| 7777精品| 久久久噜噜噜久久| 天堂久久一区二区三区| 97看剧电视剧大全| 欧美精彩视频一区二区三区| 日韩精品 欧美| 欧美日本韩国一区二区三区视频| 动漫av一区| 日本成人在线不卡| 欧美日本视频在线| 神马影视一区二区| 欧美一级片久久久久久久| 国产剧情一区二区在线观看| 精品国产乱码久久久久久郑州公司| 伊人久久大香线| 少妇人妻互换不带套| aa级大片欧美| 国产亚av手机在线观看| 亚洲国产天堂久久综合网| 羞羞网站在线看| 色乱码一区二区三区在线| 777久久精品一区二区三区无码| 亚洲色图视频网站| 日韩一区二区三区不卡视频| 久久久精品国产免费观看同学| av电影免费在线观看| 91久久在线播放| 亚洲精品亚洲人成人网| 国产一区二区三区| 欧洲美女和动交zoz0z| 狠狠色综合色综合网络| 欧美被日视频| 精品国产乱码91久久久久久网站| jizz一区二区三区| 尤物tv国产一区| 欧美黄色一级| www成人免费| 亚洲精品乱码久久久久久按摩观| 主播大秀视频在线观看一区二区| 欧美一区二区视频17c| 国产一区二区三区免费| av软件在线观看| 国产日韩欧美综合精品| 日本大胆欧美人术艺术动态| 欧美无砖专区免费| 国产精品理论片| 麻豆视频久久| 91在线视频观看免费| 亚洲成人777| 3d玉蒲团在线观看| 精品亚洲第一| 欧美精品tushy高清| 999在线观看精品免费不卡网站| 高清福利在线观看| 精品视频第一区| 日韩久久久精品| 国产专区精品| 精品久久久久久中文字幕2017| 欧美成aaa人片免费看| 亚洲精品va| 一区二区三区在线视频111| 国产日本亚洲高清| 人人香蕉久久| 日产精品一线二线三线芒果| 日韩精品中文字幕一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 免费在线观看的毛片| 美女999久久久精品视频| 中文一区二区完整视频在线观看| 日韩啪啪网站| 三年中文高清在线观看第6集| 亚洲人成电影网站色xx| 国产一区二区三区四区二区| 在线视频资源站| 自拍亚洲一区欧美另类| 色一区二区三区四区| 久久久久久久影视| 日韩亚洲视频在线| 永久555www成人免费| 国产精品你懂的在线| 性xxxx欧美老肥妇牲乱| 欧美wwww| 黄色在线视频网| 亚洲已满18点击进入在线看片| 99久久精品国产麻豆演员表| 亚洲老女人视频免费| 久蕉依人在线视频| 四虎4hu永久免费入口| 91精品国产网站| 蜜桃视频免费观看一区| 日韩a**中文字幕| 国产日韩在线一区二区三区| 亚洲加勒比久久88色综合| 久久久久国产精品麻豆| 自拍欧美日韩| 日韩欧美一区二区三区免费观看 | 欧美日韩国产一二三| 成人性视频网站| 欧美亚洲国产激情| 日本福利视频一区| 欧美精品久久久久久久久老牛影院| 狠狠色狠狠色合久久伊人| 亚洲人成亚洲精品| 黄色视屏在线免费观看| 羞羞视频网站在线免费观看| 日韩最新中文字幕|