专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

arduino与andriod

作者:未知   来源:互联网   点击数:  更新时间:2014年07月31日   【字体:

 刚玩了一下arduino与andriod手机的连接,非常棒。可以在手机上直接控制arduino了。具体的操作如下。

本实验需要一个arduino,一个ethernet shield,一个andriod的手机,一个无线路由器。
在arduino端写入程序:
#include <SPI.h>
#include <Ethernet.h>
#define action_none -1
#define action_out_all 0
#define action_on_light 1
#define action_off_light 2
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE }; //physical mac address
byte ip[] = { 192, 168, 1, 222 };   // 填写ip,设置arduino服务器地址,但要和路由器的地址一致
byte gateway[] = { 192, 168, 1, 1 };   // 这是你的默认网关
byte subnet[] = { 255, 255, 255, 0 };    //子网掩码
Server server(80);        //服务器端口
String readString = String(30); //string for fetching data from address
// arduino out
int pinOutPlight = 4;//把led灯插到pin 4口
 
// incoming GET command
String r_pinOnLight = "GET /?out=4&status=1";
String r_pinOffLight = "GET /?out=4&status=0";
String r_out_all = "GET /?out=all";
// current action
int current_action;
void setup(){
  //start Ethernet
  Ethernet.begin(mac, ip, gateway, subnet);
  delay(1000);
  pinMode(pinOutPlight, OUTPUT);
  digitalWrite(pinOutPlight, LOW);
  //enable serial datada print
  Serial.begin(9600);
  current_action = -1;
}
void loop(){
  current_action = -1;
  // Create a client connection
  Client client = server.available();
    if (client) {
 while (client.connected()) {
  if (client.available()) {
   char c = client.read();
   //read char by char HTTP request
   if (readString.length() < 30)
   {
     //store characters to string
     readString = readString + c;
   }
   //output chars to serial port
   //Serial.print(c);
   //if HTTP request has ended
   if (c == '\n') {
    Serial.print(readString);
    // ****************************************************
     if(readString.startsWith(r_pinOnLight))
     {
     Serial.print("\n ON UP \n");
     current_action = action_on_light;
     }
     else if(readString.startsWith(r_pinOffLight))
     {
      Serial.print("\n OFF UP \n");
      current_action = action_off_light;
     }
     else if(readString.startsWith(r_out_all))
     {
  Serial.print("\n ALL\n");
  current_action = action_out_all;
     }
     else
     {
  Serial.print("\n None \n");
  current_action = action_none;
     }
    // ****************************************************
     // now output HTML data starting with standart header
     client.println("HTTP/1.1 200 OK");
     client.println("Content-Type: text/html");
     client.println();
    char buf[12];
    switch(current_action)
    {
    case action_out_all:
  client.print("{\"ip\" : \"192.168.1.222\", \"devices\" : [{ \"type\" : \"light\", \"name\" : \"LED\", \"out\" : \"");
  client.print(pinOutPlight);
  client.print("\"}");
  client.print("]}");
      break;
    case action_on_light:
      digitalWrite(pinOutPlight, HIGH);
      client.print("{\"status\" : \"1\" , \"out\" : \"");
      client.print(pinOutPlight);
      client.print("\"}");
      break;
    case action_off_light:
      digitalWrite(pinOutPlight, LOW);
      client.print("{\"status\" : \"0\" , \"out\" : \"");
      client.print(pinOutPlight);
      client.print("\"}");
      break;
    default:
      current_action = action_none;
    }
 
    // ****************************************************
     //clearing string for next read
     readString="";
     //stopping client
     client.stop();
   }
 }
    }
  }
}
————————————————————————————————————————
手机端安装软件domotichome,电子市场上有下载。
copy完后,在手机上打开domotichome,点击菜单键-settings,输入刚才在sketch中设置的那个ip地址,我上面填的是192.168.1.222,下面的port当中填写80,最后save,然后菜单键-sync,在界面上会出现light(1),点击会有LED,左右两边有两个锁的图标,一个控制开,一个控制关。
关闭窗口

相关文章