微信控制樹莓派小車

介于畢業(yè)設計剛剛結束,這里算是一個收尾總結一下這次畢業(yè)設計用到的itchat這個庫,并說明來控制樹莓派的方法,為各位讀者提供一種新的遠程控制的方式。

先來說一下,樹莓派是如何來控制小車的,先來說下我給小車加裝的功能,移動(前進,后退,左拐,右拐),LED通斷,黑線循跡,移動所需要的硬件為:L298N,4個電機,LED燈的通斷需要發(fā)光二極管,黑線循跡需要(D80NK漫反射模塊),樹莓派控制小車主要是通過GPIO(General Purpose Input And Output),英文翻譯為通用輸入輸出端口,可以通過他們輸出高低電平或通過他們讀入引腳狀態(tài)我們就是通過他們來控制樹莓派小車的,這里樹莓派的引腳是不夠的我們需要為他加裝拓展版。這里我們可以看下樹莓派官方給的引腳的定義。




L298N:

這里我們不講如何接線,直講一下我們是如何控制它移動的,L298N有四個引腳,作為邏輯輸入端,同時L298N又有兩個邏輯輸出端即為 OutPutA,OutPutB,這里我們把同側的兩個電機并聯(lián)分別接入OutPutA,OutPutB.

下圖為邏輯輸入端與電機運動方向的關系:


先來講下前進的控制:


此函數(shù)為控制小車前進的代碼,小車使用BCM編碼,按照上圖的輸入端與電機與電機運動方向的關系圖,只需對IN1輸入高電壓,IN2輸入低電壓,IN3輸入高電壓,IN4輸入低電壓即可,這樣就做到了,左側電機前進右側電機前進,小車前進,后退道理同理。

小車左轉:


對于這樣的小車我們真的要思考下怎么讓其左轉,這里我們可以借鑒坦克左轉的道理即為履帶差,所以我們可以讓左側電機正向旋轉右側電機反向旋轉即為實現(xiàn)了小車的左轉,右轉道理同理,函數(shù)如下。




LED通斷:

一個LED光較弱,我們可以將三個LED并聯(lián),將LED長的一端擰在一起,將LED短的一端擰在一起,并將母對母杜邦線或者公對母杜邦線的母的一頭或者公的一頭消去將銅線分別纏繞在并聯(lián)在LED的兩個頭上,即可。


LED燈開始的時候處于低電壓狀態(tài)只需要在我們輸入開大燈的時候將其調至高電壓狀態(tài)即可完成LED的通斷。



D80NK漫反射模塊:

先來介紹下D80NK的特性,眾所周知,黑色是吸收光的顏色,其他顏色是反射光的顏色,當D80NK遇到非黑色線紅燈亮起,此時處于一個高電壓狀態(tài),當D80NK漫反射模塊遇到黑色線,此時紅燈熄滅,處于一個高電壓狀態(tài),我們可以通過這個特性來做碰撞檢測,下面是實現(xiàn)黑線循跡碰撞檢測的代碼:


它的基本邏輯就是如果黑線在D80NK中間即為左右都不碰觸黑線,左右都處于低電壓狀態(tài)此時,前進,如果左邊碰到黑線,此時左邊的D80NK處于高電壓狀態(tài),說明左邊碰觸到了黑線,此時只需要調用向左移動的函數(shù)即可,右邊碰觸到黑線同理,下面視頻即為實現(xiàn)了黑線循跡的視頻:

尋黑線測試視頻



所有的功能已經(jīng)介紹完了,下面就來介紹一下如何接入樹莓派小車以做到遠程控制,這里接入的方式有很多,比如通過ZigBee協(xié)議,另一種是通過自己搭建一個服務器通過開發(fā)一個手機app來接入,但是這些都不夠簡單也不具有普適性,試想一下如果可以用微信控制,比如小車在四川我在山東,小車已經(jīng)聯(lián)網(wǎng),我只需要在微信上發(fā)送一個“開大燈”,就可以控制LED的通斷,發(fā)送一個“前進”就可以使小車前進,這樣就真的即具有普適性:人人都有微信,操作簡單,有真正做到了遠程控制,有這樣一個東西是不是就太酷了?

這里的酷是itchat為我們提供了一種思路,如果物聯(lián)網(wǎng)強調是萬物互聯(lián),那么微信這種簡單人人都有的東西能否成為萬物互聯(lián)的接口呢?

下面來介紹下itchat庫,itchat這個庫是Python關于微信的一個庫,通過這個庫具有很多的功能,比如說對公共賬號,好友,群聊的整體獲取,如果做到這個就可以實現(xiàn)好友云詞分析,好友分析等來實現(xiàn)微信分析,這里推薦大家一篇教程:https://blog.csdn.net/lee20093905/article/details/79052795/一篇很好的通過itchat來做微信分析的教程。

還可以實現(xiàn)對于微信消息的接收,發(fā)送,分析,微信的小車就是利用了這一點來實現(xiàn)了遠程的控制,前段時間朋友是做BI(數(shù)據(jù)分析),他有一個需求是:


用itchat就可以滿足他的需求,這樣就可以聊天記錄專成excel就可以很方便的來進行需求分析了,具體教程如下:https://wxpy.readthedocs.io/zh/latest/index.html

這里po一篇我看過講itchat庫最詳細寫的最好的教程,感興趣同學可以學習下:

https://segmentfault.com/a/1190000009420701

好了,不扯別的了直接說下思路上一下代碼:



登陸:

itchat提供了一個登錄的方法,itchat.auto_login(enableCmdQR=2,hotReload=True)介于我是在MAC終端遠程連接的樹莓派,所以需要在終端形成二維碼,enableCmdQR=2即位在終端形成二維碼,如果不想每次登陸都掃描二維碼可使用參數(shù)hotReload=True該方法會生成一個靜態(tài)文件itchat.pkl,用于存儲登陸的狀態(tài)。



消息處理:

首先我們要想一下我們要發(fā)給誰消息,然后讓樹莓派小車做出響應,這里我們可以發(fā)送給文件助手,具體代碼如下這里使用的是搜索好友的方法:


接下來要判斷的就是我們收到的消息是語音還是文本消息,如果收到的是語音的話,我們將其下載下來并使用百度的STT將其轉換為文本,如果收到的文本的話,我們可以通過python的find方法來做一下判斷,這里我們以前進和開大燈為例,如果我給微信文件助手發(fā)送的字符串是開大燈,即為find方法不返回-1,此時為關鍵字,觸發(fā)小車做出反饋:


這個時候只需要將電壓置于高電壓狀態(tài),小燈即被點亮。

在舉例前進:


微信文件助手收到“前進”,這個時候需要給小車即調用前進函數(shù),此函數(shù)被調用兩秒即為小車前進兩秒,兩秒后執(zhí)行停止命令,電機停止運轉,小車停止。

同理黑線循跡依然如此。

再次強調itchat給我們很好的提供了一個接入互聯(lián)網(wǎng)智能設備的方法,我們可以從此出發(fā)來連接萬物,可能用文字來描述不太清楚,下面給大家看下測試視頻:

微信控制樹莓派小車測試視頻


但是只是有文字還是不夠智能,我們希望一種更為智能的方式說白了就是懶以及更人性化的東西來遠程控制,下篇文章就會對這兩種方式作出介紹即為STT(Speak To Text),TTS(Text To Speak),語音識別,語音反饋。

實現(xiàn)這兩種東西的意義就是我對文件助手發(fā)送語音例如“打開大燈”,他會在執(zhí)行打開大燈命令的同時,通過3.5mm的音頻輸出設備給我們一個反饋例如會說“好的,以打開大燈”。

以及語音聊天,語音聊天的實現(xiàn)方式即為使用了圖靈機器人,然后再使用百度的TTS將圖靈機器人回復的文本播放出來,這樣就做到了語音聊天,這些都會在下篇做出更新。

最后,現(xiàn)在百度的DuerOS以他方便的硬件和系統(tǒng),已經(jīng)有人做到了使用DueroS來控制家居設備,比如坐在沙發(fā)上,大喊“小度,小度,打開空調”,無需通過微信而是通過拾音器來做到這一點,這對于未來連接萬物以及未來智能設備提供了一種新的思路。



本文純原創(chuàng),6月寫完之后發(fā)布于自己的公共賬號,圖片所示名字即為公共號的id,轉載使用請聯(lián)系作者,侵權必究。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容