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();
}
テストの様子を動画でご覧ください。
お代官がオイらを呼んでいるときの想像図です。
こういう風にうまくいけば良いんだけどね・・・・・・
明日、お代官にリモコンの使い方を教えます。
うまく使ってくれますように・・・ナンマイダァ!!!