質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

解決済

ESP32 wifi通信で エラー:Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.

PK95261
PK95261

総合スコア1

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

1回答

0評価

0クリップ

1948閲覧

投稿2021/09/25 04:21

前提・実現したいこと

お世話になっております。
ESP初心者です。

ESP-WROOM-32のwifi通信機能を使って、
ESP2個で親機、子機で通信するラジコンを製作しようとしています。
その前段階として、親機に接続したスイッチを押すと、子機がLED点灯する
というプログラムを作成しています。

少し詳細ですが、
親機にタクトスイッチを複数個用意して、
ボタンに応じた指令を子機が受信し、スイッチに応じたLEDが点灯するというものです。
スイッチ14のいずれかと、スイッチ5が同時に押されたら、
スイッチ1
4用のLEDと、スイッチ5用のLEDが同時に点灯するように、
配列を組んでいます。

発生している問題・エラーメッセージ

コンパイル、書き込みまではできるのですが
実際に親機、子機にUSBで接続して、起動しても
子機側は動きませんでした。
シリアルモニタで子機側を確認すると、
下記エラーメッセージが表示されます。

AP IP address: (ここにIPアドレスが表示されます) Starting UDP Local port: 10000 Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. Core 1 register dump: PC : 0x40081031 PS : 0x00060a30 A0 : 0x800d0631 A1 : 0x3ffb1f40 A2 : 0x00000011 A3 : 0x00000002 A4 : 0x0000000a A5 : 0x3ffb1f88 A6 : 0x00000000 A7 : 0x00000004 A8 : 0x3f40069c A9 : 0x00000000 A10 : 0xffffffff A11 : 0x00000050 A12 : 0x08000000 A13 : 0x00000000 A14 : 0xffffffff A15 : 0x00000032 SAR : 0x0000001a EXCCAUSE: 0x0000001c EXCVADDR: 0xffffffff LBEG : 0x400014fd LEND : 0x4000150d LCOUNT : 0xffffffff ELF file SHA256: 0000000000000000 Backtrace: 0x40081031:0x3ffb1f40 0x400d062e:0x3ffb1f60 0x400d1ede:0x3ffb1fb0 0x400897fa:0x3ffb1fd0 Rebooting... ets Jun 8 2016 00:22:57 rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1216 ho 0 tail 12 room 4 load:0x40078000,len:10944 load:0x40080400,len:6388 entry 0x400806b4

受信側

#include <WiFi.h> #include <WiFiUdp.h> int LED1 = 2; int LED2 = 4; int LED3 = 16; int LED4 = 17; int LED5 = 18; int RcvData=0; int Rcvstate=0; int RcvBuf[1];//配列数は送られてきたデータの数n カウント数はn-1 int RcvCount; int Cmotor;//Crowlerモータswitch条件分岐変数 int Bmotor;//Basterモータswitch条件分岐変数 const char ssid[] = "SSID"; // SSID const char pass[] = "password"; // password const int localPort = 10000; // ポート番号 const IPAddress ip(IPアドレス); // IPアドレス(ゲートウェイも兼ねる) const IPAddress subnet(255, 255, 255, 0); // サブネットマスク WiFiUDP udp;//WifiUDPをudpという変数に変換 void setup() { Serial.begin(115200); WiFi.softAP(ssid, pass); // SSIDとパスの設定 delay(100); // 追記:このdelayを入れないと失敗する場合がある WiFi.softAPConfig(ip, ip, subnet); // IPアドレス、ゲートウェイ、サブネットマスクの設定 Serial.print("AP IP address: "); IPAddress myIP = WiFi.softAPIP(); Serial.println(myIP); Serial.println("Starting UDP"); udp.begin(localPort); // UDP通信の開始(引数はポート番号) Serial.print("Local port: "); Serial.println(localPort); pinMode(2, OUTPUT); pinMode(4, OUTPUT); pinMode(6, OUTPUT); pinMode(17, OUTPUT); pinMode(18, OUTPUT); } void loop() { /*if (udp.parsePacket()) { char i = udp.read(); //ceramie追記 askiiから文字列へ ← もともとあったコード Serial.println(i); // UDP通信で来た値を表示 ←もともとあったコード }*/ while(udp.parsePacket()){ RcvData=udp.read(); //Serial.println(RcvData); //Serial.println(RcvState); switch(Rcvstate){ case 0: RcvBuf[RcvCount]=RcvData; RcvCount++; if(RcvCount >=2){ RcvCount=0; Rcvstate = 1; //Serial.print(" RcvData*"); //Serial.println(RcvData); } break; case 1: MotorCnt(); Rcvstate=0; break; } } delay(3000); } void MotorCnt(){ Cmotor = RcvBuf[0];//試験用としてLED1~4を点灯する Serial.print(Cmotor); switch(Cmotor){ // Perform an action depending on the command case 1://Move Forward digitalWrite(LED1,HIGH); delay(10); /* LED1を接続したpinの電圧をLOWにする */ digitalWrite(LED1,LOW); break; case 2://Move Forward digitalWrite(LED2,HIGH); delay(10); /* LED1を接続したpinの電圧をLOWにする */ digitalWrite(LED2,LOW); break; case 3://Move Forward digitalWrite(LED3,HIGH); delay(10); /* LED1を接続したpinの電圧をLOWにする */ digitalWrite(LED3,LOW); break; case 4://Move Forward digitalWrite(LED4,HIGH); delay(10); /* LED1を接続したpinの電圧をLOWにする */ digitalWrite(LED4,LOW); break; } Bmotor=RcvBuf[1];//Bastermotor制御 if(Bmotor=1){ digitalWrite(LED5,HIGH); delay(10); /* LED1を接続したpinの電圧をLOWにする */ digitalWrite(LED5,LOW); } }

送信側

#include <WiFi.h> #include <WiFiUdp.h> int S1 = 2; int S2 = 4; int S3 = 16; int S4 = 17; int S5 = 5; /*↑スイッチ1~5*/ int valMotor; int valBCanon; int i; int sendbuf[1]; const char ssid[] = "SSID"; // SSID const char pass[] = "password"; // password static WiFiUDP wifiUdp; static const char *kRemoteIpadr = "IPアドレス"; //送信先のIPアドレス static const int kRmoteUdpPort = 10000; //送信先のポート static void WiFi_setup() { static const int kLocalPort = 5000; //自身のポート WiFi.begin(ssid, pass); while( WiFi.status() != WL_CONNECTED) { delay(500); } wifiUdp.begin(kLocalPort); } static void Serial_setup() { Serial.begin(115200); Serial.println(""); // to separate line } void setup() { Serial_setup(); WiFi_setup(); /* S1は入力であることを示す */ pinMode(S1,INPUT); /* S2は入力であることを示す */ pinMode(S2,INPUT); /* S3は入力であることを示す */ pinMode(S3,INPUT); /* S4は入力であることを示す */ pinMode(S4,INPUT); /* S5は入力であることを示す */ pinMode(S5,INPUT); } void loop() { wifiUdp.beginPacket(kRemoteIpadr, kRmoteUdpPort); void bring(); wifiUdp.endPacket(); } void bring(){ /* S1の状態を読み、HIGHだったら(押されていたら) {}内を実行 */ if(digitalRead(S1) == HIGH){ valMotor=1; } else if(digitalRead(S2) == HIGH){ valMotor=2; } else if(digitalRead(S3) == HIGH){ valMotor=3; } else if(digitalRead(S4) == HIGH){ valMotor=4; } else{ valMotor=0; } if(S5==HIGH){ valBCanon=1; } else{ valBCanon=0; } sendbuf[0]=valMotor; sendbuf[1]=valBCanon; for(i=0;i<2;i++){ wifiUdp.write(sendbuf[i]); } }

試したこと

Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
がエラーメッセージ文なので調べてみました。
どうも、メモリ関係に関するエラーみたいで、再起動がかかってしまっているようです。
下記文献で、対策が書いていたので、同様の方法をとったのですが、
エラーメッセージは変わらず表示され、解決できず、大変困っております。
https://www.1ft-seabass.jp/memo/2017/07/31/esp32-developer-aws-iot-tips/

補足情報(FW/ツールのバージョンなど)

Arduino 1.8.16
ESPは下記両方のバージョンを試しました。
https://github.com/espressif/arduino-esp32
https://dl.espressif.com/dl/package_esp32_index.json

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。