**
基于Wemos的wifi控制的避障小車總結
一.使用的基本元器件
1.L9110電機
2.超聲波模塊
3.Wemos集成電路板
4.可以傳輸資料的type-A介面
5.和一個帶有DC頭和裝有開關電池盒(4節5號電池)
6.電烙鐵
7.熱熔槍
二.開發環境
1.基于ArduiNo開發環境
三.開發小車時候需要的其他的開發軟體
1.夜神模擬器
2.串口除錯助手
3.USB下載驅動程式
4.eclipse軟體
5.TCP連接
**四.中間改造是遇到的問題以及注意事項
1.每次燒錄程式是先觀察串口,波特率以及對應的板子名稱是否選擇正確,
2.上傳成功后顯示的畫面

3.燒寫代碼需要調整代碼字體,在平臺檔案選擇欄中找到首選項就可以看見,編輯器字體大小就可以調整字體,

4 .如果遇到圖片中的錯誤,是在燒寫代碼的程序中沒有關閉串口引起的,

5.在小車的接線口完全有自己定義(但建議盡量選擇D2-D8介面這個范圍內),
6.如果燒寫程序中無法燒寫成功的話,把其他元器件的接線都拔掉先燒寫程式,后面在接線其他模塊上,
7.在設定wifi的IP的時候可以把家中的路由器的動態地址改為靜態地址,
8.組裝元器件的時候一定要注意靜電防護,在插線的時候切勿用力過大導致的接觸不良等問題,
9.ipconfig和arp-a去檢查自己的網路連接及IP地址,
10.程式上傳成功后,可以通過串口的方式來檢查你發送的指令是否正確,
11.程式上傳成功后,打開串口沒有任何資訊出來的話,可以先初始化串口,在初始化其他模塊,
12.打開串口后記得先給wemos上電,
13.搞清楚超聲波模塊測距為什么要除以58.
14.打開串口助手只需要修改埠和波特率

16.波特率一般選擇為9600,115200等,
17.在給電機接線的時候切勿不能裝反,還有超聲波模塊GND和VCC這兩根線不接錯位置不然會造成模塊啥訓,
18.TCP連接也可以發送訊息給串口(都是需要知道路由IP地址的前提下),
五.主要程式代碼
#include <ESP8266WiFi.h>
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5
#define Echo D2 // 引腳接到D2引腳上
#define Trig D8 //引腳接到D8引腳上
char* ssid = "FAST_669A"; //wifi的熱點名稱
char* passwd = "a12345678"; //wifi的熱點密碼
int port = 8888;// 編口號
WiFiServer server(port);// 設定服務器埠號
long getTime()
{
digitalWrite(Trig, HIGH); //發送一個10微秒脈沖
delayMicroseconds(10);
digitalWrite(Trig, LOW); //low就是輸入一個低電平
return pulseIn(Echo, HIGH); //波傳輸程序echo高電平,計算高電平時間就獲取波傳輸的時間,單位是(微秒)
}
void initChaoShengBo()
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}
void initWiFiSta()
{
WiFi.mode(WIFI_STA); //設定STA模式
WiFi.begin(ssid, passwd); //連接網路
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP()); //通過串口列印wemos的IP地址
}
void initL9110s()
{
pinMode(Dong1, OUTPUT);
pinMode(Dong2, OUTPUT);
pinMode(Zhuan1, OUTPUT);
pinMode(Zhuan2, OUTPUT);
}
void qian()
{
digitalWrite(Dong1, HIGH);
digitalWrite(Dong2, LOW);
}
void hou()
{
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, HIGH);
}
void ting()
{
digitalWrite(Dong1, LOW);
digitalWrite(Dong2, LOW);
}
void zuo()
{
digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, HIGH);
}
void zheng()
{
digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, LOW);
}
void you()
{
digitalWrite(Zhuan1, HIGH);
digitalWrite(Zhuan2, LOW);
}
void setup()
{
// put your setup code here, to run once:
initL9110s();
initWiFiSta();
initChaoShengBo();
Serial.begin(115200);
server.begin(); //啟動服務器的API
}
void loop() {
char cmd;
int mark = 0; //定義一個mark標記位
long dis;
WiFiClient client = server.available(); //服務器初始化
while (client.connected()) {
while (client.available() > 0) { //有資料來了,類似串口的那個函式
cmd = client.read(); //讀取資料
Serial.println(cmd); //通過串口除錯的方法去觀察接收的指令
dis = getTime() / 58; //計算避障的時間
if (dis < 10) {
hou();
delay(200); //延時200毫秒
ting();
mark = 1; //設定一個標記位置
} else {
mark = 0;
}
switch (cmd) {
case 'q':
qian();
break;
case 'h':
hou();
break;
case 'z':
zuo();
break;
case 'y':
break;
case 's':
ting();
break;
case 'd':
zheng();
break;
}
}
}
}
師承上官可編程 陳立臣老師
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/249820.html
標籤:其他
