chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

組み込みRustで温湿度+気圧測定→一難去ってまた一難

取り組み: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つ目を作り出そうとしている??