原理講解
原理簡述:利用發(fā)布訂閱模式,即:利用ESP8266 訂閱了一個主題,再利用app inventor 編寫的app 往這個主題發(fā)布消息,由于ESP8266 訂閱了這個消息,所以就可以收到app發(fā)布得消息,從而執(zhí)行相應(yīng)得動作,比如前進(jìn)\后退\左轉(zhuǎn)\右轉(zhuǎn)。
小車改裝
如果有小車的話可以進(jìn)行改裝,改裝成WIFI小車,如果沒有小車的話,可以現(xiàn)行組裝。
STM32改裝方案: 建議采用串口通信的方式,ESP8266可以收到手機(jī)app發(fā)來的控制指令,如果ESP8266收到指令,可通過串口給stm32發(fā)送信息,stm32收到指令后,對小車執(zhí)行相關(guān)動作即可。
arduino uno 改裝方案:方案一,這個可以采用和stm32一樣的原理,利用串口通信,esp8266收到云端指令,通過串口給arduino 發(fā)信息,arduino收到串口信息,對小車執(zhí)行相關(guān)動作即可。方案二,更換NodeMCU開發(fā)板,把a(bǔ)rduino uno 更換為NodeMCU開發(fā)板,直接用NodeMCU當(dāng)作小車的動作控制器,這種方式比較推薦,較為簡單,nodeMCU收到云端指令,直接執(zhí)行小車動作函數(shù)即可。NodeMCU編程完全兼容arduino開發(fā),更換的時候,把控制引腳對應(yīng)好就行。
樹莓派小車改裝方案:寫個python腳本,腳本為TCP客戶端,通過TCP客戶端連接到服務(wù)器,當(dāng)app通過云端發(fā)送控制指令時,樹莓派就會收到命令,就可以執(zhí)行相關(guān)小車動作即可。
其他開發(fā)板:參考arduino uno 改裝方案即可。
ESP8266 例程代碼
游客,本帖隱藏的內(nèi)容需要積分高于 1 才可瀏覽,您當(dāng)前積分為 0
代碼修改:
- //用戶私鑰,可在控制臺獲取,修改為自己的UID
- #define UID "4d9ec352e0376f2110a0c601a2857225"
- //主題名字,可在控制臺新建
- #define TOPIC "mycar"
復(fù)制代碼
在[巴法創(chuàng)客云控制臺] 新建一個主題,主題名字隨意,例如mycar,本實(shí)例用用mycar,使用示例代碼時應(yīng)修改為自己的主題名字,字母或數(shù)字或字母加數(shù)字組合。UID為用戶私鑰,在 [巴法創(chuàng)客云控制臺] 注冊登陸后可獲得。
小車控制引腳:
本例程中是四驅(qū)小車
- //**************************************************//
- #define DIRA D0
- #define PWMA D1
- #define DIRB D2
- #define PWMB D3
- #define DIRC D5
- #define PWMC D4
- #define DIRD D6
- #define PWMD D7
- //**************************************************//
- ```
- **控制函數(shù):**
- ```javascript
- void forward();
- void back();
- void turnLeft();
- void turnRight();
- void Stop();
- void forward(){//小車前進(jìn)
- Serial.println("forward");
- digitalWrite(DIRA,HIGH);
- digitalWrite(DIRB,HIGH);
- digitalWrite(DIRC,LOW);
- digitalWrite(DIRD,LOW);
-
- analogWrite(PWMA,500);
- analogWrite(PWMB,500);
- analogWrite(PWMC,500);
- analogWrite(PWMD,500);
- }
- void back(){//小車后退
- Serial.println("back");
- digitalWrite(DIRA,LOW);
- digitalWrite(DIRB,LOW);
- digitalWrite(DIRC,HIGH);
- digitalWrite(DIRD,HIGH);
-
- analogWrite(PWMA,500);
- analogWrite(PWMB,500);
- analogWrite(PWMC,500);
- analogWrite(PWMD,500);
- }
復(fù)制代碼
ESP8266消息檢測:
- if((TcpClient_Buff.indexOf("&msg=1") > 0)) {
- forward();
- oldtime = millis();
- t_flag = true;
- }else if((TcpClient_Buff.indexOf("&msg=2") > 0)) {
- back();
- oldtime = millis();
- t_flag = true;
- }else if((TcpClient_Buff.indexOf("&msg=3") > 0)) {
- turnLeft();
- oldtime = millis();
- t_flag = true;
- }else if((TcpClient_Buff.indexOf("&msg=4") > 0)) {
- turnRight();
- oldtime = millis();
- t_flag = true;
- }else if((TcpClient_Buff.indexOf("&msg=0") > 0)) {
- Stop();
- }else if((TcpClient_Buff.indexOf("&msg=on") > 0)) {
- up_flag = true;
- }else if((TcpClient_Buff.indexOf("&msg=off") > 0)) {
- up_flag = false;
- }
復(fù)制代碼
程序說明:如上所示,通過字符串匹配,
檢測到字符串 &msg=1 執(zhí)行前進(jìn)動作,
檢測到字符串 &msg=2 執(zhí)行后退動作,
檢測到字符串 &msg=3 執(zhí)行左轉(zhuǎn)動作,
檢測到字符串 &msg=4 執(zhí)行右轉(zhuǎn)動作,
檢測到字符串 &msg=0 執(zhí)行停止動作,
檢測到字符串 &msg=on 打開一直運(yùn)動開關(guān),
檢測到字符串 &msg=off 關(guān)閉一直運(yùn)動開關(guān)。
(默認(rèn)情況下,如果收到前進(jìn)等指令,小車只會前進(jìn)1.5s,如果發(fā)送on指令后,再收到前進(jìn)等指令,就會一直前進(jìn)。off指令是關(guān)閉)。
如果是采用串口通信的同學(xué),當(dāng)收到相關(guān)指令,通過發(fā)送串口發(fā)送相關(guān)指令控制小車即可。
WIFI配網(wǎng)
本程序需要給WIFI板配網(wǎng),首先關(guān)注公眾號“巴法云”,或掃碼

手機(jī)需要先連接到WIFI,在“云設(shè)備”中點(diǎn)擊“WIFI配網(wǎng)”即可,配網(wǎng)成功后設(shè)備會重啟,稍等幾秒即可,只需配網(wǎng)一次即可,如需再次重新配網(wǎng),需要連續(xù)重啟5次開發(fā)板,每次間隔2s內(nèi),開發(fā)者也可接串口開輸出的調(diào)試信息。
# 程序測試
在[巴法創(chuàng)客云控制臺]此主題處(本例程demo中為mycar) 推送消息 1 ,開小車是否正常前進(jìn)。
指令定義 前進(jìn)是推送1,后退是推送2,左轉(zhuǎn)是3,右轉(zhuǎn)是4,停止是0,如需更多動作,可在單片機(jī)中自定義即可,簡單說就是檢測到某個字符串就執(zhí)行相關(guān)動作,這個應(yīng)該還是很好理解的。例如檢測到msg=1,單片機(jī)就會認(rèn)為是前進(jìn)指令,會執(zhí)行前進(jìn)。在本例程中小車不會一直前進(jìn),如果收到前進(jìn)指令,只會前進(jìn)1.5s,如需一直前進(jìn),推送on,即可,關(guān)閉一直前進(jìn),推送off。
如果測試程序都正常運(yùn)行,可以通過生成自己的安卓手機(jī)app進(jìn)行控制。
安卓app制作
安卓app 采用App Inventor開發(fā)。**拖拽編程,大家不用擔(dān)心不會玩。**
Google App Inventor是一個完全在線開發(fā)的Android編程環(huán)境,拋棄復(fù)雜的程式代碼而使用積木式的堆疊法來完成您的Android程序。而且這款編程軟件不一定非要是專業(yè)的研發(fā)人員,甚至根本不需要掌握任何的程序編制知識。因?yàn)檫@款軟件已經(jīng)事先將軟件的代碼全部編寫完畢,用戶只需要根據(jù)自己的需求向其中添加服務(wù)選項(xiàng)即可。也就是我們所要做的只是寫簡單的代碼拼裝程序。
需要修改為自己的UID和topic主題,需要和單片機(jī)里的保持一致,不然單片機(jī)會接收不到消息。
上篇帖子的第三節(jié)(app inventor 開發(fā)):[帖子](https://blog.csdn.net/bemfa/article/details/98478379)
|