開源:安卓手機app控制arduino,通過esp8266


第一 、先上效果圖

在這里插入圖片描述
具體連接:
ESP8266-01 ----------arduino
3.3v-------------3.3V
GND-----------GND
EN--------------3.3V
TX-------------pin13
RX----------------pin12

第二、原理講解

原理簡述:利用發布訂閱模式。第一步,新建主題,第二步,arduino通過esp8266訂閱這個主題。第三步、通過app往這個主題發消息。由於單片機訂閱了這個主題,所以可以實時收到發往這個主題的消息。從而達到通過app或者微信小程序控制arduino單片機的目的。

關於發布訂閱:

訂閱(訂閱):訂閱給定的一個主題。
發布(發布)將信息發送到指定的主題。

只有訂閱該主題的設備才可以收到發往該主題的消息。

通俗的來講:就是像博客訂閱的場景,什么意思呢,也就是說100個人訂閱了你的博客,如果博主發表了文章,那么100個人就會同時收到通知郵件,訂閱/發布模式就是這樣的原理。

如果還不理解的話再通俗講一下,就像生活中聽收音機,要想聽收音機,肯定就是調頻啦,只有在正確的頻道上面,我們才能聽得到好聽的節目,所以說訂閱首先要訂閱一個頻道/主題,只有訂閱了該主題,我們才能收到發往該頻道/主題的消息。

在本例程中,arduino借助ESP8266訂閱主題,app訂閱或者小程序發布消息,arduino會實時收到消息,就可以實時控制arduino了。

第三、下載程序到arduino

開發環境:arduino IDE
esp8266-01不需要編程。

arduino 示例程序下載:點擊下載

注意:上傳程序的時候,需斷開arduino 和esp8266的連線,不然會下載失敗。

程序說明,波特率9600

由於ESP8266-01默認波特率是115200,需要先手動調節esp8266-01的波特率為9600,115200波特率過高會亂碼。

調整方法:ESP8266-01連接到usb轉ttl

五根線
esp8266---------UsbTTL
tx----------rx
rx----------tx
vcc-------3.3v
gnd--------gnd
en----------3.3v

打開串口調試助手,找到esp8266的com口並打開,發送

AT+UART=9600,8,1,0,0

末尾應該加上回車換行,串口會回復ok
在這里插入圖片描述
串口調試助手下載工具:點擊下載

如果上步設置波特率沒反應,則是你的esp8266固件不支持更改波特率,可以刷esp8266官方固件,教程:鏈接

用arduino打開程序,需要修改WIFI等信息

/***********************需要修改的地方************************/
String ssid ="newhtc";       //WIFI名稱,區分大小寫,不支持5G
String password="qq123456";  //WIFI密碼,區分大小寫
String uid ="4d9ec352e0376f2110a0c601a2857225";    //用戶私鑰,巴法雲控制台獲取
String myTopic ="light002";     //用戶主題,巴法雲控制台創建
const int LED_Pin = 2;       //需要控制的LED引腳值
//***********************************************************/

巴法創客雲控制台 新建一個主題,主題名字隨意,例如light002,本實例用用light002,使用示例代碼時應修改為自己的主題名字,字母或數字或字母加數字組合。UID為用戶私鑰,在 巴法創客雲控制台 注冊登陸后可獲得。
登陸完成后,可在控制台看到自己的私鑰UID,如圖所示:

在這里插入圖片描述

創建主題,在控制台,可創建主題。

  • 第一輸入主題,字母或數字或字母+數字組合。
  • 點擊創建主題。

在這里插入圖片描述

WIFI名稱為自己的路由器WIFI名稱,區分大小寫,寫錯會導致連接不上網絡的。

重要代碼講解:

/*
 * 檢查收到的信息 
 * 字符串匹配,匹配到開燈指令,進行開燈,匹配到關燈指令,進行關燈
 * 匹配到錯誤信息,進行重啟啟動(一般為網絡情況的故障)
 */
void check_msg(String myMsg){
  if((myMsg.indexOf("&msg=on") >= 0)) {   //如果檢測到開燈指令
    turnOnLed();  //執行開燈函數
  }else if((myMsg.indexOf("&msg=off") >= 0)) { //如果檢測到關燈指令
    turnOffLed(); //執行關燈函數
  }else if(myMsg.indexOf("CLOSED") >= 0){  //檢測到斷開服務器連接,重新連接
      Serial.println("--reconnect server:bemfa");
      SendCommand("AT+CIPSTART=\"TCP\",\"bemfa.com\",8344","OK");
      mySerial.println("AT+CIPSEND");
      delay(1000);
      mySerial.println("cmd=1&uid="+uid+"&topic="+myTopic+"\r\n");  //發送訂閱指令
    }else if(myMsg.indexOf("ERROR") >= 0 || myMsg.indexOf("busy") >= 0){  //檢測到錯誤反饋或者網絡繁忙,重啟arduino
          Serial.println("beginning restart");
           Serial.println(myMsg);
        resetFunc(); //重啟函數,執行重啟
    }
}

對收到的消息,進行字符串匹配,收到帶on的消息,把P10引腳置高,收到帶off的消息,把P10口置低電平。

具體接口可參考:巴法雲官方文檔

如果路由器有網絡的話,esp8266會自動連接服務器,可在巴法創客雲控制台 刷新網頁,查看訂閱設備是否在線。如果在線的話,可以在控制台推送on或許off消息,可以在串口調試助手查看單片機是否收到指令。波特率9600。

當檢測到消息為on 時,執行開燈,當檢測到消息為off 時,執行關燈。開發者可在控制台推送on或者off,然后檢測esp8266是否收到,如果收到,說明正常可進行下一步app編寫。

說明:消息不單單局限於on或off,開發者可以張大腦洞隨意定義的,你推送什么消息,在單片機處做什么消息檢測就可以了。

第四 app inventor 開發

原理:同樣通過TCP 長連接,連接到服務器,當按下按鈕,就向服務器該主題推送個消息,ESP8266就可以收到該消息了。

簡介:Google App Inventor是一個完全在線開發的Android編程環境,拋棄復雜的程式代碼而使用積木式的堆疊法來完成您的Android程式。 而且這款編程軟件不一定非要是專業的研發人員,甚至根本不需要掌握任何的程序編制知識。因為這款軟件已經事先將軟件的代碼全部編寫完畢,用戶只需要根據自己的需求向其中添加服務選項即可。也就是我們所要做的只是寫簡單的代碼拼裝程序。

安裝appInventor 點擊安裝

本操作只提供一個app的demo,界面過於丑陋,大家可自由發揮更改界面。

demo 下載點擊下載

頂部導航欄,依次點擊(項目-->導入項目aia),選擇上一步驟下載的aia文件導入即可。點擊導入的項目,即可看到控制面板,面板主要分為在組建設計和邏輯設計,用戶可在右上角進行模式切換。

app

(組建設計)面板可以向屏幕添加組建以進行二次開發。(邏輯面板)則進行相關邏輯編寫。

app
導入aia文件后,如果只是簡單使用,只需要修改兩個地方,一個是主題名字,一個是UID,均需開發者置換成自己的topic(主題名字)和UID(用戶私鑰),均可在創客雲控制台獲取點擊跳轉

此處的主題topic應該和ESP8266程序里面設定的主題修改為一樣,不然會收不到消息。UID修改為自己的私鑰。

在這里插入圖片描述

app

控制邏輯

當按鈕'打開'被點擊,發送on,ESP8266即可收到on消息

在這里插入圖片描述

具體發送的消息,開發者可自定義,例程中只是發送簡單的字符串,開發者也可發送json之類的,

不過在ESP8266端要對json消息體進行解析。更多指令格式說明:接入文檔

如果想控制家里的燈具,加個繼電器即可,通過引腳輸出高低電平控制繼電器的開和關,從而達到控制220v交流電的效果。繼電器需要用3.3V繼電器。

在這里插入圖片描述

在這里插入圖片描述

app可實時展示當前各種傳感器信息,可做遠程監控,手機只要有網絡就可以收到數據信息。不管是2G 3G 4G WIFI都行。

第五、wx小程序開發

教程:https://www.cnblogs.com/bemfa/p/13209704.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM