ESP8266 UDP for SG90 youtube

iPhoneから、ESP8266に接続されているSG90系のサーボモータを稼働させるのにご利用ください

ESP8266 で UDP での受信に対応させます 
IO 5 にサーボをつけています。
SSID ESP8266 パスワード 12345678 のwifiアクセスポイントとして起動します
接続後 iPhoneアプリで通常192.168.4.1 ポート 8888 でアクセスします

iPhone用のUDPアクセスアプリは現在申請中
旧LED用アプリはこちらこちらから


ソースコード





#include 
#include 


WiFiUDP UDP;
unsigned int localPort = 8888;

const char* ssid = "ssid";
const char* password = "password";


const char *ap_ssid = "ESP8266";
const char *ap_password = "12345678";

char packetBuffer[255];
static const char *udpReturnAddr = "1.1.1.1";
static const int udpReturnPort = 8889;
void motor_servo(int port,int motor_speed, int seconds) {
Serial.println("motor_servo");
const int SERVO_PIN = port;

  int pulse_width = 1500-motor_speed*8;
  int starttime = millis();
  while(true) {
    if (millis()-starttime > seconds) break;
      digitalWrite(SERVO_PIN, HIGH);
      delayMicroseconds(pulse_width);
      digitalWrite(SERVO_PIN, LOW);
      delay(20);
  }
}


void setup() {
    
    Serial.begin(115200);
    Serial.println(""); // to separate line
     pinMode(15, OUTPUT);
     pinMode(5, OUTPUT);

// WiFi.mode(WIFI_AP);  // モード設定
//   WiFi.softAP(ap_ssid, ap_password);  // APのSSID・パスワード設定
//  IPAddress myIP = WiFi.softAPIP();   // APとしてのIPアドレスを取得。デフォルトは  192.168.4.1 ?
//  Serial.println("AP IP address: ");
//  Serial.println(myIP);

 // AP+STAモードの設定
  WiFi.mode(WIFI_AP_STA);

  // APとして振る舞うためのSSIDとPW情報
  WiFi.softAP(ap_ssid, ap_password);

  // STAとして振る舞うための接続先APのSSIDとPW情報
  WiFi.begin(ssid, password);

  // APへの接続完了待ち
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(". ");
  }
  Serial.println("connected!");

  IPAddress myIP = WiFi.softAPIP();   // APとしてのIPアドレスを取得。デフォルトは  192.168.4.1 ?
  Serial.println("AP IP address: ");
  Serial.println(myIP);
 Serial.println(WiFi.localIP());



UDP.begin(localPort);

}

void loop()
{

    int packetSize = UDP.parsePacket();
    
    if (packetSize) {
        
        int len = UDP.read(packetBuffer, packetSize);
        //終端文字設定
        if (len > 0) packetBuffer[len] = '\0';
        
        Serial.print(UDP.remoteIP());
        Serial.print(" / ");
        Serial.println(packetBuffer);
         digitalWrite(4,LOW);
         digitalWrite(16,LOW);
  
    int data[5];
    stringToIntValues( packetBuffer, data, ',' );

  Serial.print(data[0]);
  Serial.print(" :  ");
  Serial.print(data[1]);
  Serial.print(" :  ");
  Serial.print(data[2]);
  Serial.println("");

  String s;

  s = data[0]; //packetBuffer;
 if(data[0] > 0){
   motor_servo(data[0],data[1],data[2]);
  }
        UDP.beginPacket(udpReturnAddr, udpReturnPort);
        UDP.write("ok");
        UDP.endPacket();
        
    }
    
    
    delay(3000);
}
// String型のカンマ区切り文字列をint型配列に分解する関数
void stringToIntValues(String str, int value[], char delim) {
  int k = 0;
  int j = 0;
  char text[8];

  for (int i = 0; i <= str.length(); i++) {
    char c = str.charAt(i);
    if ( c == delim || i == str.length() ) {
      text[k] = '\0';
      value[j] = atoi(text);
      j++;
      k = 0;
    } else {
      text[k] = c;
      k++;
    }
  }
}