AmebaMotors - 使用 Ameba 作為服務器來控制小車
AmebaMotors介紹
AmebaMotors 是一個提供如何控制馬達相關的 API 庫。
請下載 AmebaMotors(https://github.com/ambiot/ambd_arduino/raw/master/Arduino_zip_libraries/AmebaMotors.zip)
並且新增 AmebaMotors 至 Ameba: https://www.arduino.cc/en/Guide/Libraries#toc4
材料準備
• AmebaD [ AMB21 / AMB22 / AW-CU488 Thing Plus ] x 1
• L298N H-Bridge x 1
• 4輪車 or 2輪車+萬向輪
範例說明
流程
在這個範例中,我們將 Ameba 連接到 WiFi 並使用 Ameba 作為服務器,用戶可以通過網頁控制 4 輪/2 輪小車。
首先,將 Ameba 連接到 L298N H-Bridge 和小車。
要了解有關 L298N H-Bridge 技術細節的更多信息,請查看此處 https://www.amebaiot.com/en/ameba-arduino-amebamotors-basic/。
打開範例,“Files” -> “Examples” -> “AmebaWiFi” -> “WiFiControlCar”。
在範例中使用了以下引腳:
ENA | IN1 | IN2 | IN3 | IN4 | ENB |
8 | 9 | 10 | 11 | 12 | 13 |
Wiring:
Note:
• 這邊我們將Ameba的5V接到L298N的+12V供電的地方,但並不是每個L298N模組都可以使用5V供電。如果不行的話,請使用其它電源(Ex. +12V)供電給L298N的+12V接腳,再用L298N的+5V供電給Ameba。
• 馬達的正確接線取決於每個型號(不同型號可能相反)。 請先運行測試程序,在組裝小車前確保它運行正常。
• 為方便起見,建議使用杜邦線來處理馬達和L298N 的接線。
接線完之後,在每次需要改動程式時,可以先將L298N的電源拔掉,避免馬達不預期地亂跑。然後再將Ameba接上電源。上傳完程式並確定開始測試時再將L298N的電源插上。
然後,將代碼上傳到 Ameba
在範例中,將標示的代碼段修改為相應的資訊。
上傳代碼並按下 Ameba 上的重置按鈕。 建立連接後,您會在Arduino IDE中看到“To see this page in action, open a browser to http://xxx.xxx.xxx.xxx”的信息,如圖:
接下來,打開同一網域下的電腦或手機瀏覽器並輸入網址。
在網頁中,您可以按相應的按鈕來控制4個方向中的任何一個方向來控制小車。
Demo 影片
程式碼說明
使用 WiFi.begin() 建立 WiFi 連接。
https://www.arduino.cc/en/Reference/WiFiBegin
獲取 WiFi 連接信息:
使用 WiFi.SSID() 獲取當前連接網絡的 SSID。
https://www.arduino.cc/en/Reference/WiFiSSID
使用 WiFi.RSSI() 獲取連接的信號強度。
https://www.arduino.cc/en/Reference/WiFiRSSI
使用 WiFi.localIP() 獲取 Ameba 的 IP 地址。
https://www.arduino.cc/en/Reference/WiFiLocalIP
使用 WiFiServer server() 創建一個監聽指定端口的服務器。
https://www.arduino.cc/en/Reference/WiFiServer
使用 server.begin() 使服務器開始監聽連接。
https://www.arduino.cc/en/Reference/WiFiServerBegin
使用 server.available() 獲取連接到服務器並具有可供讀取數據的客戶端。
https://www.arduino.cc/en/Reference/WiFiServerAvailable
使用 client.connected 獲取客戶端是否已連接。
https://www.arduino.cc/en/Reference/WiFiClientConnected
使用 client.println() 打印數據。
https://www.arduino.cc/en/Reference/WiFiClientPrintln
使用 client.print() 將數據打印到客戶端連接的服務器。
https://www.arduino.cc/en/Reference/WiFiClientPrint
使用 client.available() 返回可供讀取的字節數。
https://www.arduino.cc/en/Reference/WiFiClientAvailable
使用 client.read() 讀取從客戶端連接的服務器接收到的下一個字節。
https://www.arduino.cc/en/Reference/WiFiClientRead
使用 client.stop() 斷開客戶端與服務器的連接。
https://www.arduino.cc/en/Reference/WiFIClientStop