====== Commande de servo-moteur OSC ESP8266 ======
en code arduino pour test
// servo moteur a commande OSC
// WIFI
#include
#include
// OSC
#include
#include
//port numbers for OSC
#include
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
const int servopin = 4; //( 5 sur esp )
int pos;
#define MONIT true // debug serie
const float Version_prog = 0.01 ;
const unsigned int inPort = 9081;
//destination IP pour la trace OSC
IPAddress MonitIP(192, 168, 0, 99); // IP et port du moniteur
const unsigned int MonitPort = 9998; // suivi normal
IPAddress DebugIP(192, 168, 0, 123); // IP et port de debug
const unsigned int DebugPort = 9999;
WiFiUDP udpin;
WiFiUDP udpout;
const char* ssid = "ssid";
const char* password = "blablabla";
char* nomhost = "SERVO-1"; // le nom iendra de l'ip
char* nomservo = "SERVO-"; // debut du nom du servo
int noservo = 1; // no du servo
char* OSCVar = "/SERVO-1";
// DHCP donc pas besoin
//IP
//IPAddress (192,168,IPC,IPD);
int IPC = 0;
int IPD = 81;
void Angle(OSCMessage &msg) {
int angle = msg.getInt(0);
if( angle>= 0 && angle <= 180) { // FUTABA pour nous 23-153
myservo.write(angle);
MonitMsg("angle", angle);
}
}
bool MonitMsg(char debugbla[], int debugint) {
sprintf(OSCVar, "/SERVO-%d/%s", noservo, debugbla);
if (MONIT) {
Serial.println("");
Serial.println(OSCVar);
}
OSCMessage envoi(OSCVar);
//envoi.add(debugbla);
envoi.add(debugint);
udpout.beginPacket(MonitIP, MonitPort);
envoi.send(udpout);
udpout.endPacket();
udpout.beginPacket(DebugIP, DebugPort);
envoi.send(udpout);
udpout.endPacket();
envoi.empty();
}
void setup() {
Serial.begin(115200);
Serial.println(ESP.getChipId(), HEX);
//setup ethernet part
Serial.println();
Serial.print("servo-eau ");
Serial.println(Version_prog);
Serial.print("Connecting to SSID ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
//WiFi.hostname(nomhost);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// DHCP donc pas fixé ici
//WiFi.config(IPAddress(192, 168, IPC, IPD), IPAddress(192, 168, IPC, IPD), IPAddress(255, 255, 255, 0));
Serial.println("");
Serial.println("WiFi connected");
Serial.println(ssid);
Serial.println("IP address: ");
IPAddress IPLOCAL = WiFi.localIP();
IPD = (int)IPLOCAL[3];
Serial.println(IPD);
Serial.println(IPLOCAL);
//noservo = abs(IPD - 80);
//Serial.println(WiFi.macAddress);
sprintf(nomservo, "SERVO-%d", noservo);
sprintf(OSCVar, "/SERVO-%d", noservo);
Serial.println("hostname: ");
Serial.println(nomservo);
WiFi.hostname(nomservo);
Serial.println(WiFi.hostname());
Serial.println("Starting UDP");
udpin.begin(inPort);
Serial.print("Local port: ");
Serial.println(udpin.localPort());
delay(100);
// envoi le bonjour
MonitMsg("BONJOUR", (int32_t)ESP.getChipId());
MonitMsg("version", (int)(Version_prog * 100));
MonitMsg("servopin", servopin);
myservo.attach(servopin); // attaches the servo
for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
myservo.write(0);
delay(500);
myservo.write(90);
delay(500);
myservo.write(180);
delay(500);
}
void loop() {
/* for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
*/
// Lire la comande et executer le debut
OSCMessage msgIN;
int size;
char puce_char[] = " ";
if ( (size = udpin.parsePacket()) > 0)
{
while (size--)
msgIN.fill(udpin.read());
if (!msgIN.hasError()) {
// /stop immediat moteur et commande
msgIN.dispatch("/angle", Angle); // commande=0
}
udpin.flush();
}
}
et donc
oscsend 192.168.0.165 9081 /angle i 90
sleep 1
oscsend 192.168.0.165 9081 /angle i 23
sleep 1
oscsend 192.168.0.165 9081 /angle i 155