利用喫灰的釣魚利器(esp8266)做一個手機遠程遙控小車
*嚴正聲明:本文僅限於技術討論與分享,嚴禁用於非法途徑
前言
在FB看了不少關於ESP8266釣魚測試的文章,這麼低成本的玩法,我心動了。在一次買了兩個燒錄數次Copy過來的代碼後就一直喫灰,想必各位也有類似的經歷。那麼本着“廢物”利用的原則,今天來打造一個手機遙控的玩具小車,使用WiFi接入,當設備和手機在同一個局域網中,爲局域網通信,其餘情況,使用MQTT遠程通信。
思路:nodemcu接入wifi同時根據指令控制舵機,通過給電機驅動板不同的高低電平,使舵機驅動板驅動馬達。
假設 A1 A2爲輸入口,D1 D2爲輸出口(接電機。) 給驅動板供電以後,假設利用Nodemcu使A1爲高電平,A2爲低電平,則電機正轉,相反,A2高電平,A1低電平,那麼電機反轉,A1 A2都爲低電平,則電機不轉。
準備工作
需要的設備
廢棄玩具遙控車、淘汰手機舊電池、喫灰的釣魚玩具ESP8266、9.9包郵舵機一個、小車裏拆下來的線材、航模馬達一個、靈巧的一雙手。
使用Arduino IDE來對Nodemcu(就是esp8266+4M的flask,即你們喫灰的那個)編程。所以需要先簡單的配置一下arduino。
安裝軟件|添加esp8266支持
首先從 Arduino 官網 下載最新版本的Arduino IDE軟件並安裝。
安裝完成以後,進入首選項(Preferences),找到附加開發板管理器地址(Additional Board Manager URLs),並在其後添加如下信息:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
之後點擊工具-開發板-開發板管理器,進入開發板管理器界面:
下載並安裝blinker Arduino庫
點擊下載 https://github.com/blinker-iot/blinker-library/archive/master.zip
Windows:將下載好的blinker庫解壓到我的電腦>文檔>Arduino>libraries文件夾中
Mac OS:將下載好的blinker庫解壓到文稿>Arduino>libraries文件夾中
在app中添加設備,獲取Secret Key
APK地址: http://blinker.clz.me/blinker-2.2.4.apk
進入App,點擊右上角的“+”號,然後選擇添加設備
點擊選擇Arduino>WiFi接入
選擇要接入的服務商
複製申請到的Secret Key
DIY一個炫酷的界面
在設備列表頁,點擊設備圖標,進入設備控制面板
首次進入設備控制面板,會彈出嚮導頁
在嚮導頁點擊載入示例,即可載入示例組件
拆解並改裝小車:
以前大概這樣?
改裝轉彎模塊
拆掉華麗的外表,並用烙鐵在如圖位置開個方形洞:
把多餘的部件清理掉,餘下轉動裝置
清理乾淨,電池盒的蓋子什麼的掀飛。不平的地方用烙鐵抹平。
將舵機的舵把用螺絲固定,舵把在合適的位置擰上一個長螺絲釘,但是不要太長以免無法合蓋。舵把的螺絲釘釦住玩具小車轉向裝置中間的洞。舵機牽拉,便可達到一個轉彎的效果。
剛纔打孔的地方就是固定舵機的地方。
組裝好,再用螺絲壓緊。
改裝動力模塊
更換電機:把右邊的垃圾小機機改爲左邊的老式航模電機。
由於航模電機長了一節,是不可能蓋嚴了,把蓋住電機屁股的那一塊用烙鐵抹掉。
蓋住以後傳動絲滑流暢,雖然醜了點,但是強行裝上電機了。
編寫程序
值得一提的是,你需要用哪個口直接填寫即可。例如 你使用gpio5 接一個小燈泡。聲明變量時填寫 int led = D1; 即可
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#include <Blinker.h>
#include <Servo.h>
Servo myservo;
//向右轉
void right(){
int pos = 0;
//舵機端口號
myservo.attach(D1);
for(pos = 0; pos <= 180; pos += 3){
myservo.write(pos);
delay(10);
}
myservo.write(180);
delay(200);
}
//向左轉
void left(){
int pos=100;
myservo.attach(D1);
for(pos = 100; pos >= 0; pos -= 3){
myservo.write(pos);
delay(10);
}
myservo.write(0);
delay(200);
}
//復位
void rest(){
myservo.attach(D1);
myservo.write(100);
delay(200);
}
char auth[] = "b8b8d0568edb";
char ssid[] = "LookCos";
char pswd[] = "123456789";
// 前進後退,左轉右轉
BlinkerButton Button1("btn-qj");
BlinkerButton Button2("btn-ht");
BlinkerButton Button3("btn-zz");
BlinkerButton Button4("btn-yz");
//方向復位按鍵
BlinkerButton Button5("btn-rest");
//停車
BlinkerButton Button6("btn-stop");
BlinkerNumber Number1("num-abc");
int counter = 0;
// 前進
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(D3, HIGH);
digitalWrite(D2, LOW);
}
// 後退
void button2_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
digitalWrite(D2, HIGH);
digitalWrite(D3, LOW);
}
// 左轉
void button3_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
left();
}
// 右轉
void button4_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
right();
}
// 方向復位
void button5_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
rest();
}
//停車
void button6_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
rest();
digitalWrite(D2, LOW);
digitalWrite(D3, LOW);
}
// 如果未綁定的組件被觸發,則會執行其中內容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
void setup() {
// 初始化串口
Serial.begin(115200);
int QQ_GROUP = 8805926;
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);
//前後左右
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback);
Button4.attach(button4_callback);
//方向復位
Button5.attach(button5_callback);
//停車
Button6.attach(button6_callback);
}
void loop() {
Blinker.run();
}
燒錄程序(直接USB插上即可):
一般的Nodemcu 如何選擇即可。
組裝好,調試:
第一次用這個東西畫圖,畫的不太好,而且我的電機驅動模塊沒有找到。就找了一個(綠色的那個)代替。
如圖,我使用外置5V電源來驅動舵機與馬達,值得注意的是,舵機要與Nodemcu共地(地線接一塊)才能控制舵機。
下面那個電池(iPhone 5S原裝電池)專門用來驅動Nodemcu 3.3V與5V皆可。
親測,局域網環境,延遲很低。