デジスコ撮影実習日誌

デジスコとデジカメで野鳥や草花を撮影するのが楽しくて実習に励んでいます。 最近では電子工作にはまっています。

リモコンらしく工作しました

2023年01月20日 16時37分49秒 | 工作実習

2023/01/15 (日曜日) 曇り一時小雨

2階のオイらの作業部屋で工作に熱中していると、階下で叫んでいるお代官の声が
聞こえないことがあります。
しびれを切らしたお代官が2階まで上がってきてオイらの耳元で「何度呼んだら
分るの、まったくもう!!!」と怒りの声をあげます。
「おぉ、ゴメン、ゴメン、気が付かなかったよ。」
オイらは最近、聴力が落ちてこんなことがちょくちょく起きるようになってしまい
ました。 
そこであり合わせの部品で無線でコントロールするアラーム音発生装置を工作しま
した。  ブレッドボードにマイコンを取り付けてむき出し状態でのテストは何と
かうまくいきました。
クライアントは「お代官が操作しなくてはなりませんので、むき出しではNGです。
そこで段ボールでケースを作りました。



段ボール工作はハサミとノリ(接着剤)で済むので安直にできます。




ブレッドボードと電池ケースを収めたところです。




配線を済ませてパソコン(ARDUINO)からプログラムをロードしました。


テストの様子です。 何とかうまくいきました。


クライアントの回路図です。



クライアントのプログラムはこんなものです。
開発システムはARDUINOです。


// ESP32→ESP32 UDP通信 
// リモコン・クライアント

#include  ≺ WiFi.h ≻      
#include  ≺ WiFiUdp.h ≻

#define LEDgreen 13     //Green
#define LEDyellow 12     //Yellow
#define LEDblue 32      //Blue

char ssid[] = "ESP32_wifi";   // SSID
char pass[] = "esp32pass";   // password

WiFiUDP wifiUdp;

char *kRemoteIpadr = "192.168.4.1";   //送信先のIPアドレス
int kRmoteUdpPort = 7700;       //送信先のポート
int sw[8] = {25,26,27,14,15,18,4,5};
int swdata[10] ;

void WiFi_setup(){
  static const int kLocalPort = 5000;     //自身のポート
  WiFi.begin(ssid, pass);

  while( WiFi.status() != WL_CONNECTED) {
    digitalWrite(LEDgreen,HIGH);
    delay(200);
   }

  wifiUdp.begin(kLocalPort);

  digitalWrite(LEDgreen,LOW);
  digitalWrite(LEDblue,HIGH);

 }


void setup(){

  pinMode(LEDyellow,OUTPUT);
  pinMode(LEDblue,OUTPUT);
  pinMode(LEDgreen,OUTPUT);

  for(int i = 0; i < 8; i++){
   pinMode(sw[i],INPUT_PULLUP);
  }

  digitalWrite(LEDyellow, HIGH);
  digitalWrite(LEDgreen, LOW);
  Serial.begin( 115200 );
  Serial.println(" ");

  WiFi_setup();
   Serial.println(" ****** PROG START ******" );
  }


void loop(){
  digitalWrite(LEDyellow,HIGH);

  for( int i = 0; i < 8; i++){
   if( digitalRead(sw[i]) == 0 ){
    swdata[i] = 0;
    } else { swdata[i] = 1; }
   }

  for(int i = 0; i < 8; i++){
   Serial.print( "swdata[i] = ");
   Serial.println( swdata[i]);
   }

  Serial.println(" ***** UDP PACKET SEND ******");

  wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort);

  for(int i = 0; i < 8; i++){
    wifiUdp.print(swdata[i]);
   }

  wifiUdp.endPacket();

  delay(200);

}


これはサーバーの回路図です。



プログラムはこんなものです。


//ESP32-ESP32_UDP_SWReadSend_SERVER
//リモコン・サーバー

#include  ≺ WiFi.h ≻      
#include  ≺ WiFiUdp.h ≻

#define LEDblue 12    
#define LEDyellow 13   

char ssid[] = "ESP32_wifi";     // SSID
char pass[] = "esp32pass";     // password
int localPort = 7700;        // ポート番号

IPAddress ip(192, 168, 4, 1);     // IPアドレス(ゲートウェイも兼ねる)
IPAddress subnet(255, 255, 255, 0);  // サブネットマスク

char Wifibuff[30]; 

int ledNo[]={14,27,26,25,33,32,15,2};

int soundflag;
int soundcount;
int soundtime;

WiFiUDP udp;

void setup() {

  pinMode(LEDblue, OUTPUT);
  pinMode(LEDyellow, OUTPUT);

  for( int i = 0; i < 8; i++){
    pinMode(ledNo[i], OUTPUT);
   }

  digitalWrite(LEDblue, LOW);
  digitalWrite(LEDyellow, LOW);

  Serial.begin(115200);

  WiFi.softAP(ssid, pass);       // SSIDとパスの設定
  delay(500);            // 追記:このdelayを入れないと失敗する場合がある
  WiFi.softAPConfig(ip, ip, subnet);   // IPアドレス、ゲートウェイ、サブネットマスクの設定

  Serial.println(" ");

  Serial.print("AP IP address: ");
  IPAddress myIP = WiFi.softAPIP();
  Serial.println(myIP);

  Serial.println("Starting UDP");
  udp.begin(localPort);         // UDP通信の開始(引数はポート番号)
  digitalWrite(LEDyellow, HIGH);
  Serial.println("*** Receve Starat ***");
  Serial.print("SSID: ");
  Serial.print(ssid);
  Serial.print(" PASSWORD: ");
  Serial.println(pass);
  Serial.print("Local port: ");
  Serial.println(localPort);

  soundtime = 150000;         // サウンド鳴動タイマ

 }

void loop() {

   digitalWrite(LEDblue, HIGH); //PIN 14 blue

   if (udp.parsePacket()>0) {

     udp.read(Wifibuff,8); //S追記

     Serial.print("SERVER Wifibuff = ");
     Serial.println(Wifibuff);

    }

   if (Wifibuff[0] == '0'){

     digitalWrite(ledNo[0],HIGH);      // sound起動表示
     digitalWrite(ledNo[4],HIGH);      // K1 LOW 
     digitalWrite(ledNo[5],LOW);      // K2 LOW
     digitalWrite(ledNo[7],HIGH);      // sound電源ON

     soundflag = 1;
     soundcount = 0;
    }else{digitalWrite(ledNo[0],LOW);}


   if(soundflag == 1){

     soundcount = soundcount + 1;

    }

   if(soundcount > soundtime){

      digitalWrite(ledNo[7],LOW);
      soundflag = 0;

    }

  udp.flush();

}

テストの様子を動画でご覧ください。




お代官がオイらを呼んでいるときの想像図です。
こういう風にうまくいけば良いんだけどね・・・・・・



明日、お代官にリモコンの使い方を教えます。
うまく使ってくれますように・・・ナンマイダァ!!!

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 音が出るリモコンを作ってみた | トップ | リモコン呼び出しは便利だ »
最新の画像もっと見る

コメントを投稿

工作実習」カテゴリの最新記事