# Кейс 3. Продолжение (Wi-Fi + Mbed) ## 3.2. Работаем с Wi-Fi в Mbed ### Соединение ESP8266 и STM32 Мы не будем полностью переписывать содержимое раздела [3.2. Работаем с Wi-Fi в Mbed](https://myitacademy.ru/edu/mod/book/view.php?id=533), а только остановимся на тех изменениях, которые нужно проделать для использования плат Unwired Devices и WeMos D1 mini. Нам понадобятся: - радиомодуль UNWR с платой-адаптером UMDK-RF ![ud-min3](/assets/images/iot-academy/ud-min3.png) - плата WeMos D1 mini ![wemos_mini](/assets/images/iot-academy/wemos_mini.png) - немножко (4 шт.) проводов (M-M) ![wires](/assets/images/iot-academy/wires.png) Подключаем платы при помощи проводов следующим образом (в скобках указаны задействованные порты микроконтроллера STM32L151): | WeMos D1 mini | UMDK-RF (STM32L151) | |:-------------:|:-------------------:| | `GND` | `GND` | | `5V` | `5V` | | `RX` | `25` (`PA_2`) | | `TX` | `26` (`PA_3`) | Кабель Micro-USB подключаем к UMDK-RF. <div class="danger">Обратите внимание, мы подключаемся к источнику питания 5&nbsp;В только потому, что на плате WeMos D1 mini стоит преобразователь питания с 5&nbsp;В до 3,3&nbsp;В. Во всех остальных случаях **максимально допустимое напряжение для STM32 и ESP8266 - это 3,3&nbsp;В!** </div> В итоге у нас должно получиться что-то такое: ![umdk-esp8266](/assets/images/iot-academy/umdk-esp8266.png) На плате UNWR нет разъёма для подключения плат расширения Arduino, а потому нет возможности использовать в коде программы такие обозначения как `D2` и `D8`, но можно использовать свои. Код в нашем случае: ```cpp #include "mbed.h" RawSerial pc(USBTX, USBRX); RawSerial dev(UNWD_GPIO_25, UNWD_GPIO_26); // the same as 'dev(PA_2, PA_3);' DigitalOut led1(LED1); void dev_recv() { led1 = !led1; while(dev.readable()) { pc.putc(dev.getc()); } } void pc_recv() { while(pc.readable()) { dev.putc(pc.getc()); } } int main() { pc.baud(115200); dev.baud(115200); pc.attach(&pc_recv, Serial::RxIrq); dev.attach(&dev_recv, Serial::RxIrq); while(1) { sleep(); } } ``` Компилируем в Mbed Studio, и не забываем про custom target (**UNWIRED_RANGE**). ### Изучение примера WiFi В данном случае опять приведем лишь небольшие комментарии к тому, что написано в разделе [3.2.2. Изучение примера WiFi](https://myitacademy.ru/edu/mod/book/view.php?id=533&chapterid=524). ~~1. Пример для версии Mbed 6.x заработал (начиная с версии mbed 6.3.0), только учтите, что для нашей платы UNWR для 6-й версии Mbed требуется другой target!~~ 1. Пример для версии Mbed 6.x, по-прежнему не работает (октябрь, 2020&nbsp;г.). На версии 5.15 - работает. Более того, в более поздних релизах (2021&nbsp;г.) 6-й версии пересмотрен механизм сетевого взаимодействия, так что работать этот пример там и не будет. 2. `D2` и `D8` меняем на макросы из серии `UNWD_GPIO_xx` как в предыдущем практикуме. 3. Сразу сделаем работу на скорости 115200 бит/с. Таким образом, наш конфигурационный файл `mbed_app.json` будет выглядеть примерно так: ```json { "config": { "wifi-ssid": { "help": "WiFi SSID", "value": "\"myssid\"" }, "wifi-password": { "help": "WiFi Password", "value": "\"mypassword\"" }, "tx": { "help": "TX pin for serial connection", "value": "UNWD_GPIO_25" }, "rx": { "help": "RX pin for serial connection", "value": "UNWD_GPIO_26" }, "socket-bufsize": { "help": "Max socket data heap usage", "value": "1024" } }, "target_overrides": { "*": { "target.network-default-interface-type": "WIFI", "esp8266.tx": "UNWD_GPIO_25", "esp8266.rx": "UNWD_GPIO_26", "esp8266.socket-bufsize": "1024", "esp8266.debug": false, "platform.stdio-convert-newlines": true, "platform.stdio-baud-rate": 115200, "platform.default-serial-baud-rate": 115200, "esp8266.provide-default" : true } } } ``` Конечно, вместо `myssid` и `mypassword` должны быть указаны свои значения. Во время занятия в нашей лаборатории мы скажем вам какие значения использовать для подключения к нашей сети. ### Запуск примера с WiFi Особых расхождений с [материалом](https://myitacademy.ru/edu/mod/book/view.php?id=533&chapterid=525) не будет. Смотрим работу примера на скорости 115200, раз мы добавили строчки ``` "platform.stdio-baud-rate": 115200, "platform.default-serial-baud-rate": 115200, ``` в конфигурационный файл. Что за ошибка -3015 лучше посмотреть на странице [документации](https://os.mbed.com/docs/mbed-os/v6.15/apis/network-socket-interfaces-and-classes.html), а сам фрагмент функции `main` записать именно с использованием символьных констант ```cpp ... if (ret == NSAPI_ERROR_IS_CONNECTED) { printf("Already connected!\n\r"); } else if (ret != NSAPI_ERROR_OK) { printf("\nConnection error: %d\n", ret); return -1; } ... ``` ### Как устроена работа с сетями в Mbed? Без комментариев, читаем [3.2.4. Как устроена работа с сетями в Mbed?](https://myitacademy.ru/edu/mod/book/view.php?id=533&chapterid=526) ### Пример с сокетами Здесь тоже изменений не будет, смотрим и выполняем [3.2.5. Пример с сокетами](https://myitacademy.ru/edu/mod/book/view.php?id=533&chapterid=527) <!-- ![Страница в процессе наполнения][under_construction] [under_construction]: /assets/images/iot-academy/under_construction.png /--> [**^ К оглавлению**](iot/samsung/archive/2020) <link rel="stylesheet" href="assets/css/danger.css" />