取り組み:MQTTがなんとか動くようになったので、、気圧センサをくっつけてみる
課題:Panicになる。なぜか?
Peripherals::takeの行を足すだけでWiFiがおかしくなる。
let peripherals = Peripherals::take()?;
Panicになっているのは、WiFiの起動のところなのだが、、 ESP_ERR_INVALID_STATE (error code 259) というメッセージは
let peripherals = Peripherals::take()?; let sys_loop = EspSystemEventLoop::take().unwrap(); let nvs = EspDefaultNvsPartition::take().unwrap(); let _wifi = mywifi::wifi_create(&sys_loop, &nvs).unwrap();
I (530) main_task: Calling app_main() thread 'main' panicked at src/main.rs:75:54: called `Result::unwrap()` on an `Err` value: ESP_ERR_INVALID_STATE (error code 259) note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace abort() was called at PC 0x42033577 on core 0 Core 0 register dump: MEPC : 0x403815ea RA : 0x40385518 SP : 0x3fc9bc20 GP : 0x3fc91400 TP : 0x3fc4b960 T0 : 0x37363534 T1 : 0x7271706f T2 : 0x33323130 S0/FP : 0x3fc9bc5c S1 : 0x3fc9bc5c A0 : 0x3fc9bc5c A1 : 0x3fc9bc3e A2 : 0x00000000 A3 : 0x3fc9bc89 A4 : 0x00000001 A5 : 0x3fc98000 A6 : 0x7a797877 A7 : 0x76757473 S2 : 0x3fc9bc40 S3 : 0x3fc9bd64 S4 : 0x00000001 S5 : 0x00000000 S6 : 0x00000001 S7 : 0x00000000 S8 : 0x00000000 S9 : 0x00000000 S10 : 0x00000000 S11 : 0x00000000 T3 : 0x6e6d6c6b T4 : 0x6a696867 T5 : 0x66656463 T6 : 0x62613938 MSTATUS : 0x00001801 MTVEC : 0x40380001 MCAUSE : 0x00000007 MTVAL : 0x00000000 MHARTID : 0x00000000 Stack memory: 3fc9bc20: 0x00000000 0x3fc9bc04 0x3fc9bc5c 0x4038c65e 0x00000004 0x3fc9bc44 0x00000003 0x00000030 3fc9bc40: 0x33303234 0x37373533 0x00000000 0x3fc92e2c 0x3fc9bc40 0x3fc92e48 0x3fc9bc3c 0x726f6261 3fc9bc60: 0x20292874 0x20736177 0x6c6c6163 0x61206465 0x43502074 0x34783020 0x33333032 0x20373735 3fc9bc80: 0x63206e6f 0x2065726f 0x00000030 0x03d00000 0x3c0f7ee4 0x00000000 0x3fc93644 0x4203357a 3fc9bca0: 0x3fc9c940 0x3c0f6e38 0x00000000 0x42018b58 0x3fc9bc94 0x3fc9bc98 0x00000000 0x4202fcc0
esp-idf-svc/src/wifi.rs で出力されているようであった。WPSって一体何なのか??
/// Gets the WPS status as a [`WPS Event`] and disables WPS. fn stop_wps(&mut self) -> Result<WpsStatus, EspError> { let mut status = self.status.lock(); if let Some(status) = status.wps.take() { esp!(unsafe { esp_wifi_wps_disable() })?; Ok(status) } else { Err(EspError::from_infallible::<ESP_ERR_INVALID_STATE>()) } }
esp-idf-svc/src/wifi.rs at master · esp-rs/esp-idf-svc · GitHub
WPS(Wi-Fi Protected Setup)ってWiFIの簡単ペアリングの機能のことか?? Peripheralsを変に触ると、WPSの動きがおかしくなる??
少しわかったこと
let peripherals = Peripherals::take()?;
上記のコードが、mainで書かれているのと、WiFiのサブルーチンでも書かれている。だから、、Peripheralsを2回読んでいる。取り合いになっていると推測*1。一つだけ作ってそれを使いまわすように修正が必要。
$ usbipd unbind --guid 530a5594-cb46-448b-890b-6b93bdb8b6fc
*1:ハードは一つしかないのに、2つ目を作り出そうとしている??