В этой статье описан процесс "общения" с Arduino через интернет. Команды посылаются при помощи ajax запросов, данные запросы принемает python скрипт которые передает их через последовательное соединение serial port в плату arduino. Конечно можно приобрести готовую плату Ethernet для arduino подключить кабель и залить готовую программу. Но можно сделать все по другому.
И для этого нам понадобится:
http сервер;
интерпритатор python.
Код управления на Java Script
//Порт к которому подключен Arduino
var serialPort = 'COM5';
//непосредственно управляющая функция
var Arduino = function(command, callback){
$.get('c.py',{
c:command,
p:serialPort
}, callback);
}
В этом коде единственное нужно поменять имя порта, поставить то на которм у вас сидит arduino. Узнать где у вас Arduino можно посмотев в диспетчере устройств windows. Это имя скриптом передается интрепритатору phyton который подключается к arduino.
К примеру елси мы вызвали нашу функций Aruduino() с параметрами "123" то создастся запрос вида "index.html?с=123&p=COM5" который примент python скрипт. Что он из себя представляет.
#!/Python33/python.exe
import serial
import cgi
print ("STATUS: 200 OK\n")
req = cgi.FieldStorage();
ser = serial.Serial(req['p'].value, 9600, timeout=1)
ser.write(bytes(req['c'].value,'latin'))
ser.close()
print ("ok")
По сути он просто принемает параметр "с", и передает его в serial port "p" и далее выводит "ок"
Код под Arduino
#include <Servo.h>
Servo myservo;
void setup() {
Serial.begin(9600);
}
String getParam(){
String re;
while (Serial.available()) {
re.concat(Serial.read()-48);
}
return re;
}
int getPin(String p){
return p.substring(0,2).toInt();
}
int getVal(String p){
return p.substring(2,6).toInt();
}
// Главный цикл
void loop() {
while (Serial.available()) {
char command = (char)Serial.read();
String param = getParam();
int pin = getPin(param);
int p;
switch (command) {
case '0': //Digital write
pinMode(pin,OUTPUT);
digitalWrite(pin, LOW);
break;
case '1': //Digital write
pinMode(pin,OUTPUT);
digitalWrite(pin, HIGH);
break;
case '2': //Servo
myservo.attach(pin);
p = getVal(param);
myservo.write(p);
break;
case '3': //Digital read
pinMode(pin,INPUT);
Serial.print(digitalRead(pin));
break;
case '4': { //Analog read
int aPin = A0;
switch (pin) {
case 1: aPin = A1; break;
case 2: aPin = A2; break;
case 3: aPin = A3; break;
case 4: aPin = A4; break;
case 5: aPin = A5; break;
}
Serial.print(analogRead(aPin));
}
break;
case '5': //Analog write
pinMode(pin,OUTPUT);
p = getVal(param);
analogWrite(pin, p);
break;
}
}
}
Через последовательное соединение мы будет передовать данные следующего 1234567 где:
{1} номер команды;
{23} - номер пина;
{4567} - данные пина(если нужны);
К примеру:
Код прогаммы можно дописывать самому.
Таки образом,используя интерпритатор и ajax можно обмениваться данными с arduino главное чтобы был интернет, причем все равно какой интренет wifi, проводной или мобильный. Для доступа в Интернет через сети мобильных провайдеров можно к примеру использовать 3G маршрутизатор.