chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

樹(shù)莓派+Telegram:開(kāi)啟你的物聯(lián)網(wǎng)智能花園!

上海晶珩電子科技有限公司 ? 2025-06-05 15:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

物聯(lián)網(wǎng)花園系統(tǒng)利用樹(shù)莓派Telegram機(jī)器人,可實(shí)現(xiàn)植物澆水、燈光開(kāi)關(guān)、拍攝NDVI圖片及視頻等多種功能……

95fa086c-41e0-11f0-986f-92fbcf53809c.jpg

本項(xiàng)目所需物品

硬件組件

樹(shù)莓派 3 Model B x 1

滴灌套裝x 1

水族箱水泵x 1

SparkFun 433MHz 發(fā)射芯片x 1

軟件應(yīng)用及在線服務(wù)

Telegram(電報(bào))

項(xiàng)目背景

物聯(lián)網(wǎng)花園項(xiàng)目背后的理念

你是否玩過(guò)《開(kāi)心農(nóng)場(chǎng)》?這是一款社交網(wǎng)絡(luò)游戲,在游戲中,玩家基本上是管理一個(gè)模擬農(nóng)場(chǎng),既可以單人模式游玩,也能進(jìn)行多人聯(lián)機(jī)游戲。現(xiàn)在,假如這個(gè)農(nóng)場(chǎng)是真實(shí)存在的——你可能會(huì)說(shuō),那不就是現(xiàn)實(shí)中的務(wù)農(nóng)嘛——但請(qǐng)聽(tīng)我繼續(xù)說(shuō),假如你依然可以保持在線狀態(tài),以單人模式或多人聯(lián)機(jī)模式來(lái)管理這個(gè)現(xiàn)實(shí)中的農(nóng)場(chǎng)呢?那可就不只是“單純的務(wù)農(nóng)”了,對(duì)吧。

好吧,我并沒(méi)有農(nóng)場(chǎng),我住在城市里的一間公寓,有一個(gè)小花園。但上述想法啟發(fā)了我,讓我創(chuàng)建了一個(gè)物聯(lián)網(wǎng)(IoT)社區(qū)花園。

這個(gè)花園可以由一群志同道合的人通過(guò)Telegram應(yīng)用群聊進(jìn)行遠(yuǎn)程管理。對(duì)于那些不熟悉Telegram的人來(lái)說(shuō),它是一款類似Whatsapp的即時(shí)通訊應(yīng)用,但它允許任何用戶使用應(yīng)用程序接口創(chuàng)建一個(gè)機(jī)器人。機(jī)器人其實(shí)就是一些代碼,能夠以自動(dòng)化的方式對(duì)指令做出響應(yīng)。于是,我通過(guò)編寫(xiě)代碼實(shí)現(xiàn)了我的想法,創(chuàng)建了一個(gè)在樹(shù)莓派上運(yùn)行的Telegram機(jī)器人,它可以接收用戶的指令——給植物澆水、拍照、開(kāi)關(guān)燈。我計(jì)劃未來(lái)進(jìn)一步擴(kuò)展這個(gè)項(xiàng)目,添加溫度和濕度傳感器,不過(guò)目前我只是通過(guò)Dark Sky的天氣API獲取天氣數(shù)據(jù)。2019年4月4日,我在Facebook群組中發(fā)布了關(guān)于這個(gè)機(jī)器人的信息,很快就有來(lái)自世界各地的陌生人加入了我的Telegram群組,來(lái)擺弄我的機(jī)器人。目前,在我撰寫(xiě)這篇文章時(shí),大約有30到35人每天都會(huì)與這個(gè)機(jī)器人互動(dòng)。

讓我們稍微停頓一下——如果此時(shí)你想親自測(cè)試我們的社區(qū)物聯(lián)網(wǎng)花園,那么在你的智能手機(jī)上下載Telegram應(yīng)用程序,然后簡(jiǎn)單地尋找我們的聊天組“物聯(lián)網(wǎng)花園”,或者從你的移動(dòng)設(shè)備上點(diǎn)擊鏈接//t.me/iotgarden。另一個(gè)選擇是直接尋找https://t.me/Zenofallbot。

這兩者之間有什么區(qū)別呢?

? Iotgarden 是一個(gè) Telegram 聊天群組——該群組內(nèi)有多個(gè)用戶,名為 Zenofallbot 的機(jī)器人被添加到群組中,就像一個(gè)真實(shí)的用戶一樣。更重要的是,每個(gè)人都能看到彼此與機(jī)器人的互動(dòng)情況。這里的理念是建立一個(gè)社區(qū),我們不僅可以作為一個(gè)社區(qū)與機(jī)器人進(jìn)行互動(dòng),還可以討論改進(jìn)項(xiàng)目的想法、其他動(dòng)手實(shí)踐項(xiàng)目,或者進(jìn)行一般的技術(shù)交流。此外,你還可以在這里直接與我互動(dòng)并提出問(wèn)題,我是這個(gè)群組的管理員。

? Zenofallbot 是實(shí)際的 Telegram 機(jī)器人——如果你想在不加入社區(qū)的情況下與機(jī)器人進(jìn)行私密互動(dòng),那么可以直接搜索它的名字——這樣,其他人都無(wú)法看到你的互動(dòng)內(nèi)容。

一旦你與聊天群組或直接與機(jī)器人發(fā)起聊天,只需輸入指令“/start”并點(diǎn)擊發(fā)送,屏幕上應(yīng)該會(huì)彈出一個(gè)帶有操作按鈕的菜單。

就我們的物聯(lián)網(wǎng)花園而言,管理工作僅包括定期給植物澆水、通過(guò)使用紅外成像(NDVI)監(jiān)測(cè)光合作用活動(dòng)來(lái)分析植物健康狀況,以及最后控制LED串燈的開(kāi)關(guān)——最后這一項(xiàng)操作其實(shí)并不影響植物健康,純粹是為了花園裝飾。在花園里隨意開(kāi)關(guān)燈光,然后拍照或錄像,檢查一切是否按設(shè)計(jì)正常運(yùn)行,這對(duì)我來(lái)說(shuō)簡(jiǎn)直太有趣了——因?yàn)闊o(wú)論你身處世界的哪個(gè)角落,都有可能為我花園里的燈光進(jìn)行開(kāi)關(guān)操作。

如我之前所說(shuō),我住在公寓里,有一個(gè)小花園,但如果你有一個(gè)大后院,或者周圍有野生動(dòng)物或嚙齒動(dòng)物出沒(méi),會(huì)吃掉你花園里的農(nóng)作物,那么你可以考慮在這個(gè)系統(tǒng)中引入一個(gè)運(yùn)動(dòng)檢測(cè)系統(tǒng)來(lái)擴(kuò)展其應(yīng)用——當(dāng)檢測(cè)到運(yùn)動(dòng)時(shí),打開(kāi)聚光燈或其他形式的威懾裝置。這樣一個(gè)集成的物聯(lián)網(wǎng)系統(tǒng)能做什么,其可能性僅受人們想象力的限制。只要樹(shù)莓派能夠連接到互聯(lián)網(wǎng),這一概念還可以進(jìn)一步擴(kuò)展到管理一個(gè)真正的農(nóng)場(chǎng)——人們可以在農(nóng)場(chǎng)中使用低功耗的Xbee傳感器來(lái)監(jiān)測(cè)環(huán)境活動(dòng)。

系統(tǒng)搭建

我是使用一些簡(jiǎn)單且價(jià)格低廉的組件來(lái)構(gòu)建這個(gè)系統(tǒng)的,例如:

樹(shù)莓派(Raspberry Pi):作為運(yùn)行機(jī)器人的“大腦”。

帶藍(lán)色濾鏡的樹(shù)莓派無(wú)紅外(NoIR)攝像頭。

433兆赫無(wú)線發(fā)射芯片。

433兆赫圣誕燈開(kāi)關(guān)(接收器)。

小型水族箱水泵。

LED串燈。

這個(gè)項(xiàng)目需要電源供應(yīng)和無(wú)線網(wǎng)絡(luò)連接。對(duì)我來(lái)說(shuō)這不是問(wèn)題,因?yàn)槲易≡诠⒗?,花園距離我的路由器只有10英尺。

滴灌


水族箱泵


96364e76-41e0-11f0-986f-92fbcf53809c.jpg

管道

965a73e6-41e0-11f0-986f-92fbcf53809c.jpg

連接器

967ae2c0-41e0-11f0-986f-92fbcf53809c.jpg

滴灌系統(tǒng)主要由一個(gè)小型水族箱水泵和若干管道組成。水泵連接至etekcity出品的433兆赫無(wú)線電源插座,而該插座又與電源相連。水泵被放置在一個(gè)裝滿水的水桶中。之所以選擇433兆赫的無(wú)線電源插座,是因?yàn)槲覀兛梢岳脴?shù)莓派上的發(fā)射芯片來(lái)遠(yuǎn)程控制該插座的開(kāi)關(guān)。我之前的一篇博客文章中已經(jīng)解釋過(guò)如何實(shí)現(xiàn)這一操作。

在選擇水泵和管道時(shí),主要有兩點(diǎn)需要考慮:

水泵的功率:就我的應(yīng)用場(chǎng)景而言,我需要大約6到12英寸的揚(yáng)程。隨著揚(yáng)程的增加,水輸送速率會(huì)降低。我選擇的水泵在零揚(yáng)程時(shí)能提供211加侖/小時(shí)的流量,在12英寸揚(yáng)程時(shí)大約能提供192加侖/小時(shí)的流量。由于我的花園面積較小,這個(gè)流量對(duì)我來(lái)說(shuō)已經(jīng)足夠了。我計(jì)劃在給植物澆水時(shí)只運(yùn)行水泵1分鐘,這應(yīng)該能在1分鐘內(nèi)輸送大約192加侖/小時(shí) ÷ 60分鐘 = 3.2加侖的水,但根據(jù)實(shí)際經(jīng)驗(yàn),我發(fā)現(xiàn)水泵每運(yùn)行1分鐘,實(shí)際輸送的水量接近0.5加侖。不過(guò),這對(duì)我來(lái)說(shuō)仍然足夠用了。

管道應(yīng)與水泵適配:這是我在搭建灌溉系統(tǒng)時(shí)遇到的主要問(wèn)題。水泵自帶的最小連接器內(nèi)徑(ID)為1/4英寸,但管道的外徑(OD)也是1/4英寸。在購(gòu)買之前,我就根據(jù)產(chǎn)品規(guī)格知道這兩者是不兼容的,但我不得不購(gòu)買,因?yàn)槲艺也坏狡渌叽绲牡喂喙艿?,也找不到帶有更小噴嘴的水泵。我通過(guò)從Home Depot購(gòu)買一個(gè)彎頭連接器解決了這個(gè)問(wèn)題,這個(gè)連接器兩端的直徑尺寸都合適。

燈光

我還在花園周圍布置了一些裝飾性的LED串燈,這些燈同樣連接到了一個(gè)433兆赫的無(wú)線電源插座上,和灌溉水泵用的是一樣的插座。如前文所述,通過(guò)樹(shù)莓派搭配一個(gè)433兆赫的發(fā)射芯片,就能遠(yuǎn)程控制這個(gè)433兆赫插座的開(kāi)關(guān)。獲取插座開(kāi)關(guān)代碼的校準(zhǔn)步驟,在我之前的一篇博客文章中已經(jīng)提及過(guò)。

攝像頭

我使用的是樹(shù)莓派無(wú)紅外攝像頭,并在其上貼了一層薄薄的藍(lán)色濾鏡,這有助于利用歸一化植被指數(shù)(簡(jiǎn)稱 NDVI)來(lái)記錄光合作用活動(dòng)。我將在后面的章節(jié)中解釋 NDVI 背后的原理。普通攝像頭與無(wú)紅外攝像頭的區(qū)別在于,無(wú)紅外攝像頭沒(méi)有紅外光阻擋濾鏡,也就是說(shuō),它能捕捉到紅外光。

關(guān)于如何將攝像頭連接到樹(shù)莓派的詳細(xì)步驟,在我之前的一篇文章中已有說(shuō)明。

植物健康監(jiān)測(cè)與控制——基于數(shù)字圖像的NDVI、氣象監(jiān)測(cè)及灌溉管理

樹(shù)莓派視圖

96a41fb4-41e0-11f0-986f-92fbcf53809c.jpg

NDVI 視圖

96c66fd8-41e0-11f0-986f-92fbcf53809c.jpg

如前文所述,我使用的是樹(shù)莓派無(wú)紅外攝像頭,并在其上貼了一層薄薄的藍(lán)色濾鏡。實(shí)際上,這片藍(lán)色濾鏡就包含在樹(shù)莓派無(wú)紅外攝像頭的包裝盒里。

攝像頭捕獲的數(shù)字圖像由像素構(gòu)成,每個(gè)像素都包含值,即紅、綠和藍(lán)三種顏色,也稱為RGB通道。因此,數(shù)字形式的圖像本質(zhì)上就是一個(gè)多維數(shù)組,可表示為[高度索引, 寬度索引, [r, g, b]]。例如,假設(shè)我們有一張尺寸為1280 x 960的圖像A.jpg,那么第一個(gè)像素位于A[0, 0],其[r, g, b]值可能為[12, 40, 22](R、G、B每個(gè)值的范圍都是0-255),而最后一個(gè)像素則位于A[959, 1279],具有其他[r, g, b]值,整個(gè)多維數(shù)組共同構(gòu)成了一張圖像,即[像素行, 像素列, R, G, B]。

歸一化植被指數(shù)(NDVI)的基本原理在于,植物在光合作用過(guò)程中會(huì)吸收可見(jiàn)光譜的光,但會(huì)反射紅外波長(zhǎng)。因此,通過(guò)測(cè)量反射的紅外光強(qiáng)度,可以間接反映光合作用的情況。通常,紅色通道的互補(bǔ)金屬氧化物半導(dǎo)體傳感器對(duì)紅外波長(zhǎng)也較為敏感,而在現(xiàn)代攝像頭中,通常會(huì)配備一個(gè)特殊濾鏡來(lái)濾除這些紅外波長(zhǎng)。不過(guò),樹(shù)莓派無(wú)紅外攝像頭并未配備此濾鏡,因此其紅色通道會(huì)間接記錄紅外波長(zhǎng)。

如果在攝像頭上貼上一片物理藍(lán)色薄膜,理論上它將能夠捕獲更多的藍(lán)光和紅外光,同時(shí)濾除可見(jiàn)光譜中的紅光(R)和綠光(G)波長(zhǎng),從而便于從矢量化圖像數(shù)據(jù)中輕松計(jì)算出NDVI值。

因此,NDVI的計(jì)算公式為:(NIR-Blue)/(NIR+Blue),隨后可對(duì)圖像進(jìn)行重新組合。

在實(shí)際搭建過(guò)程中,需要將攝像頭連接到樹(shù)莓派上,并在其頂部貼上那片薄薄的藍(lán)色濾鏡(即攝像頭包裝盒中附帶的那片)。

監(jiān)測(cè)系統(tǒng)的另一部分則涉及對(duì)天氣的持續(xù)關(guān)注。我們利用Dark Sky API和Python庫(kù)來(lái)查詢天氣信息。Dark Sky是一項(xiàng)天氣監(jiān)測(cè)服務(wù),可根據(jù)GPS坐標(biāo)提供天氣數(shù)據(jù)。當(dāng)然,也可以使用直接連接到樹(shù)莓派的溫度濕度傳感器來(lái)獲取這些數(shù)據(jù),但我發(fā)現(xiàn)傳感器讀數(shù)容易出錯(cuò)。因此,為了避免在傳感器上投入過(guò)多資金,我們決定使用這項(xiàng)在線服務(wù)。

光合作用監(jiān)測(cè)數(shù)據(jù)與天氣數(shù)據(jù)的結(jié)合,足以全面反映監(jiān)測(cè)情況。

最后,我們轉(zhuǎn)向控制部分——即根據(jù)天氣情況和上次灌溉時(shí)間來(lái)決定是否給植物澆水。我為此設(shè)置了一些限制條件,將在下一節(jié)中進(jìn)行詳細(xì)解釋。

軟件功能——Telegram 機(jī)器人

該軟件主要以 Python 腳本的形式實(shí)現(xiàn)——我力求保持其簡(jiǎn)潔性,并未刻意追求完美的面向?qū)ο?a href="http://www.brongaenegriffin.com/v/tag/1315/" target="_blank">編程(OOP)設(shè)計(jì)模式,因?yàn)檫@并非我的目標(biāo)。它功能實(shí)用且運(yùn)行穩(wěn)定。我更傾向于在樹(shù)莓派上使用一個(gè)名為“tmux”的應(yīng)用程序,該程序可以創(chuàng)建一個(gè)獨(dú)立的會(huì)話,讓我在啟動(dòng) Python 腳本后,能夠關(guān)閉遠(yuǎn)程 SSH 客戶端,而無(wú)需擔(dān)心會(huì)話中斷或 Python 代碼被終止。請(qǐng)執(zhí)行以下操作安裝 tmux:

sudo apt-getinstall tmux

當(dāng)你遠(yuǎn)程登錄到樹(shù)莓派時(shí),首先啟動(dòng) tmux,然后運(yùn)行腳本:

tmuxpython3gardenBot_publish_v1.py &

要退出會(huì)話,請(qǐng)按下 Cntrl+B,然后按 D?,F(xiàn)在,你可以關(guān)閉遠(yuǎn)程 SSH 客戶端(如 Putty)。這個(gè) Python 腳本實(shí)現(xiàn)了一個(gè) Telegram 機(jī)器人,并作為控制客戶端與 Telegram 服務(wù)器進(jìn)行通信。用戶發(fā)送的命令會(huì)先傳到服務(wù)器,然后運(yùn)行在樹(shù)莓派上的 Python 代碼會(huì)輪詢這些命令。在之前的一篇文章中,我已經(jīng)詳細(xì)解釋了如何創(chuàng)建自己的 Telegram 機(jī)器人。要讓這個(gè)腳本正常運(yùn)行,你需要滿足一些先決條件:通過(guò)輸入以下命令來(lái)安裝 Darksky Python 庫(kù):

pip3install darksky

名為 MP4box 的工具可用于視頻轉(zhuǎn)換。通過(guò)輸入以下命令進(jìn)行安裝:

sudo apt-getinstall gpac

*gpac 是一組工具的集合,MP4box 是其中之一。

Telegram 機(jī)器人 API 密鑰

Telegram 機(jī)器人 Python 庫(kù):通過(guò)輸入以下命令進(jìn)行安裝:

pip3install python-telegram-bot

由于我計(jì)劃允許其他用戶監(jiān)控和控制我的花園,因此我想確保自己作為管理員始終擁有完全的控制權(quán)——即能夠移除用戶、阻止添加更多用戶等。實(shí)際上,通過(guò)使用 Telegram 用戶 ID,這很容易實(shí)現(xiàn)。每個(gè)使用 Telegram 應(yīng)用進(jìn)行消息傳遞的用戶都會(huì)被分配一個(gè)唯一的用戶 ID,你可以通過(guò)簡(jiǎn)單地給你的機(jī)器人發(fā)送消息,并使用網(wǎng)頁(yè) API 讀取該消息來(lái)找到你的唯一用戶 ID。這個(gè)用戶 ID 是由 Telegram 分配給你的手機(jī)的,因此無(wú)法被軟件偽造。

如何查找你的用戶 ID?

在你的 iOS 或安卓設(shè)備上打開(kāi) Telegram 應(yīng)用,搜索你新創(chuàng)建的機(jī)器人,并向它發(fā)送一條消息——比如“你好”。然后在你的網(wǎng)絡(luò)瀏覽器中輸入以下命令:

https://api.telegram.org/bot/getUpdates(這里的< token >是您在創(chuàng)建bot時(shí)分配的令牌,也不包括< >,只是復(fù)制粘貼密鑰)

服務(wù)器上的bot將此記錄為簡(jiǎn)單的post請(qǐng)求,并在瀏覽器上顯示:

用戶功能

一旦你獲取了這個(gè)用戶 ID,你就可以利用它來(lái)實(shí)現(xiàn)你的機(jī)器人,使機(jī)器人僅對(duì)這個(gè)特定用戶做出響應(yīng)。就我的情況而言,我希望其他人也能使用我的機(jī)器人來(lái)監(jiān)控和控制我的花園,但同時(shí)我也要保持完全的控制權(quán),因此我編寫(xiě)了相應(yīng)的函數(shù)來(lái)賦予我管理員權(quán)限。

我實(shí)現(xiàn)的主要功能是用戶與機(jī)器人開(kāi)始交互時(shí)使用的:

/start

這個(gè)功能會(huì)返回基本的使用說(shuō)明,將新用戶添加到物聯(lián)網(wǎng)控制系統(tǒng)中,并彈出一個(gè)命令菜單,用戶可以使用這個(gè)菜單來(lái)執(zhí)行各種操作。

普通用戶只能使用通過(guò)這個(gè)菜單提供的函數(shù),而管理員則擁有更多的可用函數(shù)。

管理員功能

由于樹(shù)莓派資源有限,因此需要控制澆水間隔和燈光切換間隔,這通過(guò)在代碼中使用一些控制變量來(lái)實(shí)現(xiàn),以限制使用頻率。

示例:

只能在設(shè)定的間隔時(shí)間內(nèi)澆水——例如每4小時(shí)或6小時(shí)

燈光可以每10分鐘切換一次,但不得超過(guò)這個(gè)頻率

可以每2分鐘拍攝一張照片,每5分鐘錄制一段視頻

基本上,管理員可以設(shè)置這些控制參數(shù),這就引出了我們的管理員控制功能。

有一些特殊功能只有管理員才能使用:

/stop:停止機(jī)器人運(yùn)行

/fetch:獲取當(dāng)前物聯(lián)網(wǎng)用戶列表

/add:添加用戶

/rm:移除用戶

/disable {args}:禁用菜單按鈕功能和自動(dòng)添加

/setexp {arg}:設(shè)置相機(jī)的曝光度

/setawb {arg}:設(shè)置相機(jī)的白平衡

/setLimit {arg}:為拍照、澆水、燈光、天氣和視頻設(shè)置時(shí)間限制

禁用自動(dòng)添加功能后,管理員可以完全控制哪些用戶可以手動(dòng)添加,以管理花園。禁用自動(dòng)添加后,管理員可以使用/fetch、/add和/rm命令進(jìn)行用戶管理。

此外,一旦執(zhí)行了/stop命令,機(jī)器人代碼將終止運(yùn)行,要重新啟動(dòng),需要登錄到樹(shù)莓派并手動(dòng)啟動(dòng)它。

Python代碼中提供了進(jìn)一步的說(shuō)明。

代碼部分

終于到了大家翹首以盼的環(huán)節(jié),以下是我實(shí)際開(kāi)發(fā)的社區(qū)物聯(lián)網(wǎng)花園機(jī)器人代碼。這部分代碼由三個(gè)文件組成:

1.gardenBot_publish_v1.py:這是Telegram機(jī)器人的封裝代碼以及用于運(yùn)行的主文件。

2.iotcontrol.py:這是實(shí)際實(shí)現(xiàn)用戶功能的地方。

3.NDVI.py:這是用于處理NDVI圖片的文件。

你可以在注冊(cè)后,從我的網(wǎng)站上以zip格式下載這三個(gè)文件。

免責(zé)聲明:以下Python源代碼由Zen Of All LLC在注冊(cè)后免費(fèi)提供,代碼使用者(下載者)可自由根據(jù)需要修改代碼。Zen Of All LLC對(duì)代碼本身、其維護(hù)、使用或使用者(下載者)所做的任何修改不承擔(dān)任何法律責(zé)任或義務(wù)。

英文說(shuō)明:我為了測(cè)試我的概念驗(yàn)證想法而非常迅速地編寫(xiě)了這段代碼——請(qǐng)隨意仔細(xì)閱讀并根據(jù)你自己的需求進(jìn)行編輯,如果出現(xiàn)問(wèn)題,我不承擔(dān)責(zé)任。

你需要為下載該代碼而在本網(wǎng)站上創(chuàng)建一個(gè)登錄賬號(hào)。

電路原理圖-系統(tǒng)電路圖

96e2cd40-41e0-11f0-986f-92fbcf53809c.png

代碼-物聯(lián)網(wǎng)花園代碼

Python 代碼 - 運(yùn)行文件,請(qǐng)將這三個(gè)文件都放在同一個(gè)文件夾中,然后運(yùn)行:

python3 gardenBot_publish_v1.py &

https://www.hackster.io/code_files/253191/download

# -*- coding: utf-8 -*-"""Created on Sat Apr 7 1328 2018@author: Zen Of All LLC (zenofall.com)"""importthreadingimportosfromiotcontrolimportiotcontrolfromtelegramimportInlineKeyboardButton, InlineKeyboardMarkupfromtelegram.extimportUpdaterfromtelegram.extimportCommandHandler , CallbackQueryHandlerfromtelegram.extimportMessageHandler, Filtersimportlogging##############################################################################################darkskyKey =''updater = Updater(token='')#Insert bot token#required by bot to execute functions see example: https://python-telegram-bot.org/control = iotcontrol(1234567,darkskyKey,33.8463634,-84.373057)# 1234567 is example admin id : find yours by going to web-api of telegram: https://api.telegram.org/bot/getUpdates# is telegram token during bot creation#read: https://zenofall.com/raspberry-pi-telegram-home-automation/#replace: 33.8463634,-84.373057 by latitude longitude of your location from google maps#we use adminId for special privileges on the botdispatcher = updater.dispatcher#bot examples: https://github.com/python-telegram-bot/python-telegram-bot/tree/master/examples#logging is always good#define logging format and file location####################Bot User Functions ##############################defstart(bot,update):#display menu """ BotFunction: First function using which users are supposed to interact with this bot"""

control.autoAdd(bot,update)

keyboard = [[InlineKeyboardButton("Instructions", callback_data='5')], [InlineKeyboardButton("Take Pic", callback_data='1')], [InlineKeyboardButton("NDVI Pic", callback_data='8')], [InlineKeyboardButton("Video", callback_data='9')], [InlineKeyboardButton("Local Weather", callback_data='7')], [InlineKeyboardButton("Water Plants", callback_data='2')], [InlineKeyboardButton("Ligts on/off", callback_data='3')], [InlineKeyboardButton("Status", callback_data='4')], [InlineKeyboardButton("Tutorial & Code", callback_data='6')] ]
message="Hello {} (telegram_id:{}).\nPlease read: Instructions first.\nType& send:/start again to pull up menu at any time.\n*Disclaimer: Bot logs all user commands. \nPlease Choose: \n".format(update.message.from_user.first_name,update.message.from_user.id) reply_markup = InlineKeyboardMarkup(keyboard) bot.send_message(chat_id=update.message.chat_id,text=message, reply_markup=reply_markup)
defbutton(bot,update): """ BotFunction: Function that implements the button callbacks""" query = update.callback_query bot.answer_callback_query(callback_query_id=query.id, text="Choice registered,processing request..")

if(query.data=='1'):

#control.sendPic(bot,update,False) t=threading.Thread(target=control.sendPic,args=(bot,update,False)) t.setDaemon(True) t.start() if(query.data=='8'): #global enablePic
t=threading.Thread(target=control.sendPic,args=(bot,update,True)) t.setDaemon(True) t.start() if(query.data=='9'): #global enablePic
t=threading.Thread(target=control.recordVideo,args=(bot,update)) t.setDaemon(True) t.start() if(query.data=='2'):
control.water(bot,update)
if(query.data=='3'):
control.light(bot,update)
if(query.data=='7'):
control.weather(bot,update) if(query.data=='4'):
control.status(bot,update) if(query.data=='5'): control.instructions(bot,update)
if(query.data=='6'): control.tutorial(bot,update)############# Admin only program functions####################
defunknown(bot, update): """ Unkwown command handler""" logging.info('/unknown,{},{}'.format(update.message.from_user.first_name,update.message.from_user.id)) bot.send_message(chat_id=update.message.chat_id, text="Sorry Command Not Recognized! Type: /start for all user actions.") defshutdown():
updater.stop() updater.is_idle=Falsedefstop(bot, update):#hardcoded for security only i can issue this command """ Admin Command: stop the bot Usage: /stop
""" #global adminId logging.info('/stop,{},{}'.format(update.message.from_user.first_name,update.message.from_user.id)) if(update.message.from_user.id==control.getAdminId()): bot.send_message(chat_id=update.message.chat_id, text="Stopping Server!") threading.Thread(target=shutdown).start() else: bot.send_message(chat_id=update.message.chat_id, text="ERROR: Unauthorized User!")defaddIoTUser(bot,update,args): """ Admin Command: add users manually Usage: /add 12345 324567 8726251
The numbers are ids of users
""" control.addIoTUser(bot,update,args)

defremoveIoTUser(bot,update,args): """ Admin Command: remove users manually Usage: /rm all /rm 123445 """ control.removeIoTUser(bot,update,args)
deffetchIoTUserList(bot,update):
""" Admin Command: add users manually Usage: /fetch
""" control.fetchIoTUserList(bot,update)
defdisable(bot,update,args):
""" Admin Command: disable functions in button menu Usage: /disable 1 (for pic) /disable 2 (for water) /disable 3 (for light) /disable 4 (for video) /disable all (disable all)
""" control.disable(bot,update,args)
defsetAwb(bot,update, args):
""" Admin function: set white balance Usage: /set 1.0 1.3 (red,blue)
""" control.setAwb(bot,update,args)
defsetExp(bot,update, args):
""" Admin function: set white balance Usage: /setExp auto [auto, sports, night] https://picamera.readthedocs.io/en/release-1.10/api_camera.html?highlight=exposure_mode#picamera.camera.PiCamera.exposure_mode """ control.setExp(bot,update,args)defsetLimit(bot,update,args):
""" Admin function: set time limits Usage: /setLimit pic 2.0 /setLimit water 5.0
""" control.setLimit(bot,update,args)


#def clear(bot,update,chat_data):# chat_data.clear()


####____global variables____#########
#Kill ServoBlaster - interferes with GPIO #something specific to me###comment this out if you dont have servo blastertry: os.system("sudo killall servod") exceptExceptionase: print(e) pass############ #comment ends
#####____HANDLERS_____########bot examples: https://github.com/python-telegram-bot/python-telegram-bot/tree/master/examplesstart_handler = CommandHandler('start', start)stop_handler = CommandHandler('stop', stop)#menu_handler = CommandHandler('menu', menu)addHandler = CommandHandler('add',addIoTUser, pass_args=True)removeHandler = CommandHandler('rm',removeIoTUser,pass_args=True)fetchHandler = CommandHandler('fetch',fetchIoTUserList)disable_Handler = CommandHandler('disable',disable,pass_args=True)awbHandler = CommandHandler('setawb',setAwb,pass_args=True)expModeHandler = CommandHandler('setexp',setExp,pass_args=True)setLimitHandler = CommandHandler('setLimit',setLimit,pass_args=True)#clearHandler = CommandHandler('clear',clear,pass_chat_data=True)unknown_handler= MessageHandler(Filters.command, unknown)#####____DISPATCHERS_____#######dispatcher.add_handler(start_handler)dispatcher.add_handler(stop_handler)#dispatcher.add_handler(menu_handler)dispatcher.add_handler(addHandler)dispatcher.add_handler(removeHandler)dispatcher.add_handler(fetchHandler)dispatcher.add_handler(disable_Handler)dispatcher.add_handler(awbHandler)dispatcher.add_handler(expModeHandler)dispatcher.add_handler(setLimitHandler)dispatcher.add_handler(CallbackQueryHandler(button))#dispatcher.add_handler(clearHandler)dispatcher.add_handler(unknown_handler)#Always keep unkown handler last else commands not recognized#start the bot client - poll for server messagesupdater.start_polling()updater.idle()

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    213

    文章

    30240

    瀏覽量

    217690
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2938

    文章

    46912

    瀏覽量

    402286
  • 樹(shù)莓派
    +關(guān)注

    關(guān)注

    122

    文章

    2067

    瀏覽量

    108917
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    樹(shù)莓下一個(gè)關(guān)注的領(lǐng)域是什么?

    ?眾多的電子DIY愛(ài)好者紛紛猜測(cè),聯(lián)網(wǎng)智能家居?可穿戴設(shè)別?對(duì)于廣大電子DIY愛(ài)好者的提問(wèn),樹(shù)莓的創(chuàng)始人Eben Upton在一次受訪
    發(fā)表于 09-15 09:51

    【W(wǎng)RTnode2R申請(qǐng)】家庭聯(lián)網(wǎng)智能節(jié)點(diǎn)

    。項(xiàng)目描述:正在打造一套家庭聯(lián)網(wǎng)平臺(tái),需要測(cè)試并加入智能節(jié)點(diǎn)。智能節(jié)點(diǎn)采用JSON和服務(wù)器(樹(shù)莓
    發(fā)表于 11-02 10:55

    樹(shù)莓智能車AlphaBot系列教程

    ;catid=57樹(shù)莓智能車AlphaBot教程1:人生若只如初見(jiàn) ...樹(shù)莓智能車Alph
    發(fā)表于 05-15 15:39

    分享一款不錯(cuò)的基于樹(shù)莓Raspberry Pi CM的聯(lián)網(wǎng)網(wǎng)關(guān)方案

    分享一款不錯(cuò)的基于樹(shù)莓Raspberry Pi CM的聯(lián)網(wǎng)網(wǎng)關(guān)方案
    發(fā)表于 06-15 07:01

    樹(shù)莓聯(lián)網(wǎng)開(kāi)發(fā)的應(yīng)用

    從Arduino開(kāi)始接觸電子編程,也就是所謂的聯(lián)網(wǎng)開(kāi)發(fā)吧。從最初的超聲波測(cè)距開(kāi)始,到現(xiàn)在的各種開(kāi)發(fā),其實(shí)一直在浪費(fèi)時(shí)間考慮到底用哪種技術(shù),用哪個(gè)芯片。轉(zhuǎn)了一圈下來(lái),論性能論價(jià)格,還是樹(shù)莓
    發(fā)表于 08-03 06:38

    如何利用樹(shù)莓派去設(shè)計(jì)一個(gè)聯(lián)網(wǎng)智能小車

    如何利用樹(shù)莓派去設(shè)計(jì)一個(gè)聯(lián)網(wǎng)智能小車?基于樹(shù)莓
    發(fā)表于 08-18 07:22

    樹(shù)莓能做什么

    按鍵實(shí)驗(yàn)第八課:樹(shù)莓Python開(kāi)發(fā) PWM實(shí)驗(yàn)第九課:樹(shù)莓Python開(kāi)發(fā) 電機(jī)實(shí)驗(yàn)視頻鏈接我們要干什么在學(xué)一個(gè)知識(shí)點(diǎn)的時(shí)候,特別是硬件相關(guān)的,選一個(gè)好的實(shí)驗(yàn)方式,是很不錯(cuò)的做
    發(fā)表于 09-10 07:28

    如何利用樹(shù)莓實(shí)現(xiàn)聯(lián)網(wǎng)?

    如何利用樹(shù)莓實(shí)現(xiàn)聯(lián)網(wǎng)?
    發(fā)表于 10-19 06:58

    通過(guò)樹(shù)莓的GPIO進(jìn)行串口通訊

    樹(shù)莓用在了一系列智能化改造的項(xiàng)目中,通過(guò)樹(shù)莓的GPIO進(jìn)行串口通訊,控制智能電量表、水表、電
    發(fā)表于 01-13 08:15

    樹(shù)莓3wifi配置_樹(shù)莓3開(kāi)啟wifi熱點(diǎn)_樹(shù)莓3的wifi使用教程

    樹(shù)莓3在2016年2月29號(hào)正式發(fā)布了,樹(shù)莓3幾乎和樹(shù)莓2代板型一致,大外觀沒(méi)什么變化小電
    發(fā)表于 12-08 11:47 ?3.2w次閱讀

    解答樹(shù)莓如何開(kāi)啟root賬戶

    樹(shù)莓使用的linux是debian系統(tǒng),所以樹(shù)莓啟用root和debian是相同的。
    發(fā)表于 10-30 10:06 ?6782次閱讀
    解答<b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b>如何<b class='flag-5'>開(kāi)啟</b>root賬戶

    樹(shù)莓 3 或開(kāi)啟聯(lián)網(wǎng)革命的大門(mén)

    與藍(lán)牙。使這款小型設(shè)備更為實(shí)用的并不是它更快的處理器,而是它的網(wǎng)絡(luò)支持。樹(shù)莓3或許將成為許多聯(lián)網(wǎng)項(xiàng)目的硬件平臺(tái)選擇。
    發(fā)表于 04-02 14:51 ?486次閱讀

    基于樹(shù)莓智能花園滴灌

    打開(kāi)水閥 - 無(wú)論是否需要!在干燥的天氣里,它使我們的花園保持美麗和綠色,但當(dāng)它已經(jīng)在下雨或即將下雨,或者地面已經(jīng)飽和時(shí),這純粹是對(duì)日益稀缺的資源的浪費(fèi)。?因此,對(duì)于 Windows 10 聯(lián)網(wǎng)家庭自動(dòng)化挑戰(zhàn)賽,我決定制作一個(gè)
    發(fā)表于 12-13 16:06 ?0次下載

    樹(shù)莓網(wǎng)關(guān):聯(lián)網(wǎng)應(yīng)用的新標(biāo)桿

    的特點(diǎn)是體積小巧(大約信用卡大?。δ荦R全,足以支持多種計(jì)算任務(wù)。 樹(shù)莓經(jīng)常被用作物聯(lián)網(wǎng)網(wǎng)關(guān),收集設(shè)備數(shù)據(jù),然后將數(shù)據(jù)上傳云平臺(tái),并還可以用來(lái)接收來(lái)自云端的控制指令,控制其他連接的設(shè)備。 相比,
    的頭像 發(fā)表于 10-09 16:44 ?1138次閱讀
    類<b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b>網(wǎng)關(guān):<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>應(yīng)用的新標(biāo)桿

    樹(shù)莓應(yīng)聘園?。÷氊?zé):幫你精心打理花園!

    的基礎(chǔ)知識(shí),幫助你照料花園。MudPi是我制作的一個(gè)開(kāi)源花園系統(tǒng),用于管理和維護(hù)基于樹(shù)莓花園資源。
    的頭像 發(fā)表于 06-13 16:39 ?474次閱讀
    <b class='flag-5'>樹(shù)莓</b><b class='flag-5'>派</b>應(yīng)聘園??!職責(zé):幫你精心打理<b class='flag-5'>花園</b>!