動機:
因為手邊剛好有Arduino UNO R3 板子、CC3000 WiFi Shield擴充版,
所以想說閒來就利用Android來控制Arduino!
目的:
從Android端發送指令來控制Arduino 上的 Servo馬達轉動、LED ON/OFF,以及讀取DS18B20溫度感測器讀取的值。
步驟:
STEP 1 :先按照網路上搜尋到的電路圖將Servo、LED以及DS18B20給接好。
STEP 2:再來我是利用 Adafruit_CC3000_Library裏頭的範例ChatServer下去修改
STEP 3:然後依序加入控制Servo的程式碼、控制LED開關的程式碼,最後是讀取溫度的程式碼
STEP 4:最後在Eclipse上開發一個簡單的介面,然後用模擬器來連接UNO
STEP 5:最後就可以達到雙向溝通的動作了(傳送&接收)
Source Code:
arduino code:
其實arduino的程式碼很多都是以範例程式下去修改,因此程式碼部分並不難
像是 Adafruit_CC3000_Library裏頭就有很多範例程式提供大家修改。
arduino的部分主要可以分為四個部分:(a).WiFi 連線的建立(b).LED 的控制(c).servo的控制(d).溫度感測的傳值
(a).WiFi 連線的建立
// 匯入程式庫標頭檔
#include <OneWire.h>
#include <Adafruit_CC3000.h>
#include <SPI.h>
#define WLAN_SSID "WiFi AP SSID" //輸入你要連線的無線路由器的名稱
#define WLAN_PASS ""//輸入AP密碼
// Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2
#define WLAN_SECURITY WLAN_SEC_WPA2 //輸入AP的加密方法
#define LISTEN_PORT 8080 //輸入TCP的port,以便手機端可以連入
Adafruit_CC3000_Server chatServer(LISTEN_PORT);
(b).LED 的控制
int led = 9; //先綁定led的控制腳
void setup(void)
{
pinMode(led, OUTPUT); //第9腳位,輸出
}
void loop(void)
{
digitalWrite(led,HIGH); //LED ON
delay(1000);
digitalWrite(led,LOW); //LED OFF
delay(1000);
}
(c).servo的控制
// 匯入程式庫標頭檔
#include <Servo.h>
Servo servoMain;
void setup(void)
{
servoMain.attach(2);// 腳位2
}
void loop(void)
{
servoMain.write(90); // 將馬達轉動到90度,而servo只能轉到180度就是極限了
}
(d).溫度感測的傳值
#include <DallasTemperature.h>
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
Serial.print(sensors.getTempCByIndex(0));
byte byteRead;
byteRead = sensors.getTempCByIndex(0);
chatServer.write(byteRead);
delay(1000);
}
android code:
作品呈現:
留言列表