色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于Raspberry Pi Pico的云端溫濕度監測站設計

我快閉嘴 ? 來源:易心Microbit編程 ? 作者:CircusPi ? 2022-09-13 11:52 ? 次閱讀

一、介紹

使用Pi Pico 搭配擴展板以及各種傳感器模塊,再加上網絡相關模塊將搜集到的數據上傳云端,完成一個簡易的云端溫濕度監測站。

二、軟件安裝

安裝Thonny IDE以及MircoPython Firmware的刻錄。

三、硬件配置

我們這次會使用到的模塊有SHT3x溫濕度模塊、1.3 OLEDLED燈模塊以及AM7020 NBIoT網絡模塊,接線方式如下對照圖表所示。

0dcacf56-3272-11ed-ba43-dac502259ad0.png

0e0132c6-3272-11ed-ba43-dac502259ad0.jpg

實際功能為將讀取到的溫濕度數據顯示到1.3 OLED上,以及定時將數據透過AM7020上傳云端,并且提供遠程網頁控制LED燈的功能,除了控制LED燈外也可結合繼電器實現控制家電(e.g.電燈、電扇、澆水設備……等)。

四、云端設定

這次我們會使用Adafruit IO做為云端平臺,它將會存放溫度、濕度,以及LED燈控制訊息相關數據,并且透過內建服務Dashboard將數據以圖形化方式呈現。

進到Adafruit IO官網新增三個Feed,分別為「temperature」、「humidity」、「led」,如下圖所示。

0e1c95f2-3272-11ed-ba43-dac502259ad0.png

接著請新增一個Dashboard,名稱為「pico」,如下圖所示。

0e2c29c2-3272-11ed-ba43-dac502259ad0.png

繼續在pico Dashboard內新增折線圖表以及按鈕開關,折線圖數據源選擇Feedtemperature」、「humidity」,按鈕開關數據源選擇Feedled」,如下圖所示。

0e4cd208-3272-11ed-ba43-dac502259ad0.png

五、程序撰寫

本篇所用到的范例程序代碼可至下列連結下載

https://github.com/JiekangHuang/pi_pico_adafruitIO_nbiot

()加載相關Library

為了簡化程序代碼復雜度,我們將會使用AM7020SHT31OLED MicroPython Library 來處理Driver 的部分,請將這三個Library 預先存入Pi Pico內以便之后主程序呼叫。

首先使用Thonny從本機開啟要存入的檔案,并選擇檔案>>另存新檔>>Raspberry pi pico>>輸入文件名(需與原檔名相同)

Pico Library檔案結構如下圖所示。

第一層為lib文件夾

0e70737a-3272-11ed-ba43-dac502259ad0.png

lib文件夾里為「am7020」文件夾、「sht31.py」、「ssd1306.py」。

0e86eb00-3272-11ed-ba43-dac502259ad0.png

am7020文件夾里為「am7020_modem.py」、「am7020_mqtt.py」、「am7020_nb.py」。

0ea05edc-3272-11ed-ba43-dac502259ad0.png

()程序設計

開啟打開范例「example/adafriotIO_pico.py」并執行。

1 fromutime import ticks_ms, sleep_ms

2 fromam7020.am7020_nb import AM7020NB

3 fromam7020.am7020_mqtt import AM7020MQTT

4

5 importsht31

6 frommachine import Pin, I2C

7 fromssd1306 import SSD1306_I2C

8

9 sht31_i2c= I2C(1, scl=Pin(7), sda=Pin(6), freq=400000)

10sensor = sht31.SHT31(sht31_i2c, addr=0x44)

11

12 WIDTH= 128 # oled 顯示寬度

13HEIGHT = 64 #oled 顯示高度

14

15 # 初始化 I2C 物件 I2C0 SCL =1, I2C0 SDA = GP0

16oled_i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=200000)

17

18 oled= SSD1306_I2C(WIDTH, HEIGHT, oled_i2c)

19

20 led =Pin(20, Pin.OUT)

21

22 #NBIoT 相關設定

23 apn ="twm.nbiot" # 存取點名稱

24 band= 28 # 通訊頻道

25CHECK_NET_INTERVAL_MS = 1000 # 網絡檢查間隔時間

26

27#相關設定

28MQTT_BROKER = "io.adafruit.com"

29 PORT= 1883

30 MQTT_USERNAME= ""

31MQTT_PASSWORD = ""

32TEMP_TOPIC = MQTT_USERNAME + "/feeds/pico.temperature"

33HUM_TOPIC = MQTT_USERNAME + "/feeds/pico.humidity"

34LED_TOPIC = MQTT_USERNAME + "/feeds/pico.led"

35UPLOAD_INTERVAL_MS = 30000 # 訊息上傳間隔時(毫秒)

36

37 nb =AM7020NB(0, 9600, 0, 1, 3, False) # 建立連接對象

38 mqtt= AM7020MQTT(nb) # 建立 MQTT 通訊對象

39

40

41 defnbConnect(): # ?訂聯機程序

42 print("Initializing modem...")

43 while((not nb.init() or (notnb.nbiotConnect(apn, band)))):

44 print(".")

45

46 print("Waiting for network...")

47 while(not nb.waitForNetwork()):

48 print(".")

49 sleep_ms(5000)

50

51 print(" success")

52

53

54 defreConnBroker(): # MQTT Broker 重新聯機程序

55 print("Connecting to",MQTT_BROKER, end="...")

56 if(mqtt.connBroker(MQTT_BROKER, PORT,MQTT_USERNAME, MQTT_PASSWORD, mqtt_id="ICSHOP_AM7020_MQTT_ID")):

57 print(" success")

58 print("subscribe: ",LED_TOPIC, end="")

59 if(mqtt.subscribe(LED_TOPIC,mqttCallback)):

60 print(" success")

61 else:

62 print(" fail")

63 else:

64 print(" fail")

65

66 #MQTT 訂閱內容訊息回調函數

67

68

69 defmqttCallback(msg):

70 print(LED_TOPIC, ":", msg)

71 if(msg == "ON"):

72 led.on()

73 else:

74 led.off()

75

76

77chk_net_timer = 0 # 聯機狀態查詢周期定時器

78pub_data_timer = 0 # 訊息發布周期定時器

79

80 oled.fill(0) # 清除畫面

81oled.text("Init modem...", 0, 0)

82oled.show()

83

84print("Initializing modem...")

85while(not nb.init()):

86 print(".")

87

88while(True):

89 # show SHT31 data

90 oled.fill(0) # 清除畫面

91

92 t = round(sensor.get_temp_humi()[0], 1)

93 h = round(sensor.get_temp_humi()[1], 1)

94 # print("Temperature: {}".format(t))

95 # print("Humidity:{}".format(h))

96

97 if(ticks_ms() > chk_net_timer): # 聯機狀態查詢周期

98 chk_net_timer = ticks_ms() +CHECK_NET_INTERVAL_MS

99 if(not nb.chkNet()):

100 oled.fill(0) # 清除畫面

101 oled.text("ISP Connecting", 0, 0)

102 oled.show()

103 nbConnect()

104 oled.fill(0) # 清除畫面

105 oled.text("ISPConnected", 0, 0)

106 oled.show()

107 if(not mqtt.chkConnBroker()):

108 oled.fill(0) # 清除畫面

109 oled.text("MQTTConnecting", 0, 0)

110 oled.show()

111 reConnBroker()

112 oled.fill(0) # 清除畫面

113 oled.text("MQTTConnected", 0, 0)

114 oled.show()

115

116 if(ticks_ms() > pub_data_timer): # 訊息發布周期

117 pub_data_timer = pub_data_timer +UPLOAD_INTERVAL_MS

118 print("publish: ", t,end="")

119 if(mqtt.publish(TEMP_TOPIC, str(t))):

120 print(" success")

121 else:

122 print(" Fail")

123 print("publish: ", h,end="")

124 if(mqtt.publish(HUM_TOPIC, str(h))):

125 print(" success")

126 else:

127 print(" Fail")

128 mqtt.procSubs() # 檢查訂閱頻道狀態

129 oled.text("MQTT Connected", 0,0)

130 # 加入文字內容

131 oled.text("Temp: ", 0, 10)

132 oled.text(str(t), 50, 10)

133 oled.text("*C", 90, 10)

134

135 oled.text("Humi: ", 0, 20)

136 oled.text(str(h), 50, 20)

137 oled.text("%", 90, 20)

138 oled.show() # 顯示繪制內容

程序代碼說明:

1. 引入這次實作所需模塊。

0eb7e9a8-3272-11ed-ba43-dac502259ad0.png

2. 建立并傳入I2C1建立SHT31對象,用來讀取溫濕度;建立并傳入I2C0建立OLED對象,用來操作OLEDOLED設定寬高為128*64;建立LED對象,pin設定為20,并設為輸出,用來顯示網頁控制開關狀態。

0ed2e55a-3272-11ed-ba43-dac502259ad0.png

3. 設定NBIoT 模塊所使用的APNBand(不同電信商會不一樣,此為臺灣大哥大,Band 28),設定MQTT相關參數Broker 使用Adafruit IOPort 使用1883,賬號密碼請自行修改,設定溫濕度、LED Topic,請務必與云端設定相同,35行設定數據上傳云端的間隔,使用者可自行依需求調整,這里設為30秒上傳一次;建立AM7020AM7020MQTT對象,用來將數據發送至云端平臺。

0ef11264-3272-11ed-ba43-dac502259ad0.png

4. 定義NBIoT 聯機程序,呼叫AM7020對象init 初始化方法以及nbiotConnect 方法直到成功,接著呼叫waitForNetwork 方法等待聯機完成。

0f1748c6-3272-11ed-ba43-dac502259ad0.png

5. 定義MQTT 重新聯機程序,使用AM7020MQTT對象的connBroker 方法聯機到指定Broker,這里須注意每個裝置的mqtt_id不可相同,若相同Broker 將會剔除上一次的聯機,聯機完畢后使用AM7020MQTT 對象的subscribe 方法訂閱LED Topic,并傳入callback(于下一段說明),用以接收LED開關狀態。

0f3a7a1c-3272-11ed-ba43-dac502259ad0.png

6. 定義LED數據的Callback,當AM7020MQTT對象收到LED主題數據時就會呼叫此方法,在此方法里面判斷訊息并控制LED亮滅。

0f61c130-3272-11ed-ba43-dac502259ad0.png

7. 建立檢查聯機狀態、發布數據的定時器;將OLED畫面清除并顯示初始化訊息,并等待NBIOT模塊初始化成功。

0f7b2d00-3272-11ed-ba43-dac502259ad0.png

8. 進入無窮循環,92~93行讀取溫濕度數據,97~114定時檢查NBIOT以及MQTT的聯機狀態,若中間有斷線便會呼叫上面定義的重新聯機方法,并透過OLED顯示目前狀態。

0f9b378a-3272-11ed-ba43-dac502259ad0.png

9. 透過定時器的方式定時發送溫濕度數據到云端(默認為30秒上傳一次),發送數據使用AM7020MQTT對象的publish方法,參數帶入目標Topic以及要發布的訊息。

0fc4b83a-3272-11ed-ba43-dac502259ad0.png

10. 128行使用AM7020MQTT對象的procSubs方法檢查是否有訂閱數據到達;將溫濕度數據顯示到OLED上。

0fea17f6-3272-11ed-ba43-dac502259ad0.png

六、執行結果

完成以上步驟,并執行范例程序代碼,我們就可以在OLED及云端上看到溫濕度數據,并且可以直接透過網頁按鈕控制Pico LED燈,如下圖所示。

0fff6f2a-3272-11ed-ba43-dac502259ad0.jpg

10200e74-3272-11ed-ba43-dac502259ad0.png

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • OLED
    +關注

    關注

    119

    文章

    6198

    瀏覽量

    224102
  • 監測站
    +關注

    關注

    0

    文章

    310

    瀏覽量

    11079

原文標題:如何使用 Raspberry Pi Pico 實現 IoT 物聯網?

文章出處:【微信號:易心Microbit編程,微信公眾號:易心Microbit編程】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    智能溫濕度監測 溫濕度傳感器使用

      1、智能溫濕度監測是檔案管理發展的必然與趨勢  隨著社會不斷發展與進步,檔案分類越來越細化,涉及的內容越來越豐富,信息量和數量越來越大。全國有數以萬計的大大小的檔案館,其中有許多非常重要的機要
    發表于 07-03 11:02

    【OneNET麒麟座試用申請】空氣質量數據監測站

    項目名稱:空氣質量數據監測站試用計劃:空氣質量數據監測站用于測試空氣質量監測及數據采集,實現野外或者室內空氣質量的檢測:1、測試采集PM25數據,包括室內、野外數據2、測試烹調煙氣對環境PM25
    發表于 04-05 15:03

    【Thunderboard Sense試用申請】移動空氣質量監測站

    項目名稱:移動空氣質量監測站試用計劃:項目描述:基于EFR32系列平臺,開發可移動式空氣質量監測站,板上溫濕度傳感器監測空氣溫度濕度,壓力傳
    發表于 05-19 17:10

    基于LoRa無線技術溫濕度監測解決方案

    有效措施調節庫內的溫濕度。因此,建立實時的溫濕度監控系統,并保存完整的歷史數據成為存儲行業領域的關鍵。基于四信LoRa無線技術的溫濕度傳感監測“云”是利用四信LoRa無線通信技術對倉儲
    發表于 06-12 18:42

    水質監測站在智能水產養殖監測系統中有何應用

    水質監測站的功能特點有哪些?水質監測站在智能水產養殖監測系統中有何應用?
    發表于 09-26 07:42

    中山微型水質多參數在線監測站安裝案例

    一.產品概述潤越環保微型水質多參數在線監測站采用岸基方式,以小型無線水質監測終端為核心元素,布置在河流、水庫、湖泊、飲用水源的岸邊。監測站采用移動通訊為傳輸媒介,以大屏幕顯示器和zhong央服務器為
    發表于 12-13 19:10

    如何實現環境參數智能監測站設計?

    如何實現環境參數智能監測站設計?
    發表于 12-20 07:38

    使用raspberry pi Pico的原因

    使用raspberry pi Pico的原因在硬件產品(單片機)的開發中我們往往需要借助一些額外的儀器/設備進行產品的輔助測試, 假設我們需要一個IO+ADC類型輔助設備, 以往的做法是 原理圖
    發表于 02-07 09:16

    基于 LabVIEW 的溫濕度監測系統設計與實現

    基于LabVIEW的溫濕度監測系統123456
    發表于 11-24 16:59 ?60次下載

    溫濕度監測

    進行溫濕度的仿真,采用PROTEUS進行糧倉溫濕度的檢測與控制。
    發表于 05-11 14:33 ?27次下載

    土壤墑情監測站是什么,它的應用優勢都有哪些

    監測站。 土壤墑情監測站是什么?土壤墑情監測站是一款集土壤溫濕度采集、存儲、傳輸和管理于一體的土壤墑情自動監測系統。它連接的傳感器可持續
    的頭像 發表于 11-09 11:05 ?2981次閱讀

    田間小氣候監測站有什么作用

    田間小氣候監測站可用于田間大棚內空氣溫度、濕度、光合作用強度以及二氧化碳濃度、土壤溫濕度進行自動監測,并且快速準確收集監測數據,更好的分析田
    發表于 07-23 10:08 ?546次閱讀

    管式土壤墑情監測站監測方案

    基礎,能夠測量不同層次土壤中水分含量以及溫濕度狀態。它的檢測過程為動態過程,最高可以檢測5層土壤溫濕度狀態,最低可以檢測3層土壤溫濕度狀態,帶有傾角的設備可以監測土壤的傾斜角度來確定土
    的頭像 發表于 08-06 16:46 ?1766次閱讀
    管式土壤墑情<b class='flag-5'>監測站</b><b class='flag-5'>監測</b>方案

    庫房溫濕度自動監測系統

    倉儲、庫房在管理上,環境控制都是重中之重。庫房溫濕度自動監測系統作為一種更為便捷的解決方案,已經得到廣泛的應用。 庫房溫濕度自動監測系統通過集成傳感器、數據采集器、傳輸設備和管理平臺等
    的頭像 發表于 07-09 18:00 ?695次閱讀

    溫濕度監測系統應用

    在現代化工業生產、倉儲管理、農業種植以及智能家居等領域,溫濕度監測已成為不可或缺的一環。溫濕度作為環境控制的關鍵因素,直接影響著產品質量、存儲安全、作物生長效率以及居住舒適度。因此,一套高效、精準
    的頭像 發表于 07-26 16:15 ?398次閱讀
    主站蜘蛛池模板: 亚洲色无码播放| 深夜释放自己在线观看| 在线看片韩国免费人成视频| 4438成人情人网站| 国产亚洲精品AV麻豆狂野| 青草国产超碰人人添人人碱 | 久久无码人妻中文国产| 玩弄放荡人妻一区二区三区| 9位美女厕所撒尿11分| 久久se精品一区二区国产| 午夜福到在线2019| 成人免费在线视频| 嫩草影院在线观看精品| 一二三四在线视频社区| 国产乱码免费卡1卡二卡3卡四卡| 青娱乐极品视觉盛宴av| 99re2.久久热最新地址| 久久无码AV亚洲精品色午夜麻豆| 亚洲色欲国产AV精品综合| 国产午夜精AV在线麻豆| 熟女人妻久久精品AV天堂| 趁老师睡着吃她的奶水| 欧美日韩国产在线一区二区| 正在播放一区二区| 久久er99热精品一区二区| 小小水蜜桃视频高清在线观看免费| 成人国产在线视频| 欧美性受xxxx狂喷水| 99re5久久热在线| 毛片999| 中国xxxxx69| 久久精品免费观看久久| 亚洲幼女网| 精品午夜国产福利观看| 亚洲蜜桃AV永久无码精品放毛片| 国产人人为我我为人人澡 | 亚洲精品一区三区三区在线观看 | 精品久久免费视频| 亚洲精品成人无码A片在线| 国产久久亚洲美女久久| 污漫日本E同人|