Вы просматриваете архивную страницу сайта. Информация на этой странице может быть устаревшей.
# Кейс 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.
Обратите внимание, мы подключаемся к источнику питания 5 В только потому,
что на плате WeMos D1 mini стоит преобразователь питания с 5 В до 3,3 В.
Во всех остальных случаях **максимально допустимое напряжение для STM32 и ESP8266 - это 3,3 В!**
В итоге у нас должно получиться что-то такое:
![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 г.). На версии 5.15 - работает. Более того, в более поздних релизах (2021 г.) 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)
[**^ К оглавлению**](iot/samsung/archive/2020)