# Кейс 2. Начало ## ~~2.1. Знакомство с сенсорами~~ Мы, конечно же, можем познакомиться с работой различных сенсоров прямо сейчас, как это описано в [системе обучения](https://myitacademy.ru/edu/mod/book/view.php?id=526). Но на нашем оборудовании это будет выглядеть так: ![unwr_meteo_bad](/assets/images/iot-academy/unwr_meteo_bad.png) А, наверное, хотелось бы чтобы выглядело так: ![unwr_meteo_ok](/assets/images/iot-academy/unwr_meteo_ok.png) Почему такое происходит? Да всё просто - плата Unwired Range всё же отличается от [MultiTech xDot](https://os.mbed.com/platforms/MTS-xDot-L151CC/), и используя online версию компилятора, мы не всегда можем работать с портами ввода-вывода так, как того бы нам хотелось (вспомните, что некоторые порты были перечеркнуты в таблицах ранее)! **Поэтому порядок выполнения задач [кейса 2](https://myitacademy.ru/edu/course/view.php?id=2#section-4) у нас будет другой!** Мы начнем с [пункта 2.4](https://myitacademy.ru/edu/mod/book/view.php?id=528), а дальше будем продвигаться по мере готовности нашего рабочего места. ## 2.1. Начинаем работать в Mbed Studio ### Установка Mbed Studio существует для Windows, Mac и Linux. Соответствующий дистрибутив скачивается по адресу: [https://os.mbed.com/studio/](https://os.mbed.com/studio/). Мы в лаборатории используем Linux, поэтому скачиваем именно его: ![mbedstudio_site](/assets/images/iot-academy/mbedstudio_site.png) Это будет небольшой файл программы установки. Сохраняем его. По умолчанию он будет находиться в паке `Загрузки`. ![mbedstudio_save](/assets/images/iot-academy/mbedstudio_save.png) Откройте терминал (**Ctrl+Alt+T**), если он у вас ещё не открыт. Переходим в папку `Загрузки` (переключение на русский язык и обратно - это обычно сочетание клавиш **Win+пробел**) ```bash cd ~/Загрузки ``` Делаем скачанный файл запускаемым: ```bash sudo chmod a+x MbedStudio-1.3.0.sh ``` После чего запускаем процесс установки: ```bash ./MbedStudio-1.3.0.sh ``` То есть у вас должно получиться что-то подобное: ![mbedstudio_install](/assets/images/iot-academy/mbedstudio_install.png) Далее нас предупреждают, что необходимо ознакомиться с лицензионным соглашением - нажимаем **Enter**. ![mbedstudio_st_inst](/assets/images/iot-academy/mbedstudio_st_inst.png) Чтобы пролистать всё соглашение, нажимайте пробел. Не хотите читать, и со всем согласны - жмите клавишу **Q**, а затем пишите **yes**. ![mbedstudio_agree](/assets/images/iot-academy/mbedstudio_agree.png) Тут и начнётся процесс установки. Он достаточно продолжительный по времени, так как во время него будет скачано более 1 Гб! При этом **yes** придется написать ещё пару раз. В первом случае мы соглашаемся с тем, чтобы Mbed Studio смогла определять подключенные устройства (но платы от Unwired Devices она, к сожалению, определить не сможет), а во втором - для подключения к [github.com](https://github.com/). ![mbedstudio_inst_complete](/assets/images/iot-academy/mbedstudio_inst_complete.png) Возможно, в процессе понадобится доустановить недостающие библиотеки (`libcurl4`) - программа подскажет как это сделать. Скорее всего так: ```bash sudo apt install libcurl4 libcurl4-openssl-dev ``` После установки Mbed Studio можно запустить. И сначала программа попросит авторизоваться: ![mbedstudio_login](/assets/images/iot-academy/mbedstudio_login.png) Mbed Studio имеет достаточно понятный интерфейс: ![mbedstudio_app](/assets/images/iot-academy/mbedstudio_app.png) ### Пример с миганием светодиода Исходное описание этого примера доступно в [нашей учебной системе](https://myitacademy.ru/edu/mod/book/view.php?id=528&chapterid=516). Мы же сейчас на его примере покажем, как нам работать offline, имея на руках платы от Unwired Devices. Для этого нам понадобится: - радиомодуль UNWR с платой-адаптером UMDK-RF ![ud-min3](/assets/images/iot-academy/ud-min3.png) Программу создадим в Mbed Studio. Выбираем **File -> New Program**. Тип программы выбираем **empty Mbed OS program**, называем программу как угодно, например, `hello-world`. ![studio_hello0](/assets/images/iot-academy/studio_hello0.png) > ![Важно][danger] Для создания программы будет дополнительно скачана библиотека `mbed-os` объемом примерно 1 Гб. > В последующем рекомендуется использовать библиотеку из уже имеющихся проектов, чтобы сэкономить трафик, то есть выбирать > **Link to an existing shared Mbed OS instance**. Вам по умолчанию сделают самый простой пустой `main`: ![studio_hello1](/assets/images/iot-academy/studio_hello1.png) Давайте попробуем здесь простейшую мигалку светодиодом. Вместо стандартной заготовки введите уже известный вам код: ```cpp #include "mbed.h" DigitalOut led(LED1); // main() runs in its own thread in the OS int main() { int i = 0; printf("Hello World !\n"); while(1) { wait(1.0); // 1 second led = !led; // Toggle LED printf("This program runs since %d seconds.\n", i++); } } ``` ![studio_hello2](/assets/images/iot-academy/studio_hello2.png) Обратите внимание - мы здесь можем использовать предопределенные макросы! Будем управлять светодиодом `LED1`, а не портом `PB_0`, и выводим текст в консоль без дополнительных объектов `Serial`, то есть наша программа станет более переносимой! Функция `wait` выделяется желтым как предупреждение. Она по-прежнему работает, но её не рекомендуется использовать. В дальнейшем будет сказано, как делать задержку корректнее, а пока можно собрать программу и так. Итак, сохраните свой проект в Mbed Studio. Все проекты сохраняются в папке `Mbed Programs` в домашнем каталоге пользователя. Можете набрать в терминале ```bash ls -la ~ ``` и убедиться в этом ![mbed_programs_dir](/assets/images/iot-academy/mbed_programs_dir.png) А дополнительно набрав ``` ls -la 'Mbed Programs' ``` увидеть каталог нашего проекта `hello-world` ![mbed_programs_dir_hello](/assets/images/iot-academy/mbed_programs_dir_hello.png) До сих пор мы двигались по плану, особых расхождений с основным описанием курса у нас не было. В чём они будут заключаться теперь? В отличие от [online версии](https://ide.mbed.com/compiler/) среды разработки, Mbed Studio позволяет работать с *custom boards* - отличающимися от официально поддерживаемых платами! Вы уже знаете, что платы от Unwired Devices не поддерживаются Mbed, но мы создали описание платы Unwired Range для Mbed - создали target **UNWIRED_RANGE**! Конечно, этот target - наша [собственная](https://github.com/iot-academy/mbed-os_unwr_target) инициатива, и в нём могут содержаться ошибки, но это лучше, чем ничего, а ошибки мы исправим! Скачайте файл [unwr.tar.gz для Mbed v.5.x](https://aiu.susu.ru/assets/components/fileattach/connector.php?action=web/download&ctx=web&fid=tURKEqMK1Zea6HJFUZSuvMItEOwtbZGF) или [unwr.tar.gz для Mbed v.6.x](https://aiu.susu.ru/assets/components/fileattach/connector.php?action=web/download&ctx=web&fid=54kRpayReHGDm7U2GJmHMndzqmF1iAYn) в зависимости от используемой версии Mbed (мы пока будем использовать версию 5!). Скорее всего он будет в папке `Загрузки`: ![target_download](/assets/images/iot-academy/target_download.png) Распакуем его в каталог нашей программы. В терминале это можно сделать так: ```bash tar xvf ~/Загрузки/unwr.tar.gz -C ~/Mbed\ Programs/hello-world/ ``` ![target_extract](/assets/images/iot-academy/target_extract.png) Теперь если вернуться в Mbed Studio и посмотреть на произошедшие изменения, то можно увидеть каталог `TARGET_UNWIRED_RANGE` и файл `custom_targets.json`. ![studio_hello_unwr](/assets/images/iot-academy/studio_hello_unwr.png) Именно за счет этих изменений можно писать программы под платы Unwired Range, так как теперь становится возможным выбрать соответствующий target и запустить процесс компиляции: ![studio_hello_unwr_compile](/assets/images/iot-academy/studio_hello_unwr_compile.png) Назначение кнопок интуитивно понятно: молоток - компиляция, стрелочка - загрузка программы в плату, жучок - отладка. Для плат семейства [STM32Nucleo](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html) все они будут активны. В нашем случае мы можем только компилировать программу, так как автоматическое её определение в Mbed Studio не работает. Соберите вашу первую программу нажатием на "молоток", и пусть вас не смущает долгое время компиляции: происходит сборка всех вспомогательных библиотек. При дальнейших сборках этого же проекта всё будет гораздо быстрее. По итогам сборки увидите внизу лог. Если всё прошло успешно, то мы увидим, что программа собрана, а в самой последней строке - где размещается файл прошивки: ![studio_hello_log](/assets/images/iot-academy/studio_hello_log.png) А прошивать платы мы уже умеем. Нам нужен `stm32flash`, и не забываем **перевести плату в режим программирования**: ```bash stm32flash -w ~/Mbed\ Programs/hello-world/BUILD/UNWIRED_RANGE/ARMC6/hello-world.bin /dev/ttyACM0 ``` ![term-stm32flash_studio_hello](/assets/images/iot-academy/term-stm32flash_studio_hello.png) Выходим из режима программирования платы и наблюдаем, что плата мигает встроенным светодиодом и выдаёт сообщения в порт `/dev/ttyACM0` на скорости 9600-8-N-1: ![xterm_studio_hello](/assets/images/iot-academy/xterm_studio_hello.png) ### Как правильно делать "мигалку" Собственно как правильно делать "мигалку" рассказано в [основной ветке нашего курса](https://myitacademy.ru/edu/mod/book/view.php?id=528&chapterid=517). Не будем дублировать материал. ### Советы и замечания Советы и замечания в принципе те же, что и на сайте [myitacademy.ru/edu](https://myitacademy.ru/edu/mod/book/view.php?id=528&chapterid=518). Разве что можно ещё добавить: * при создании нового проекта старайтесь использовать уже скачанную библиотеку `mbed-os`, тем самым вы сэкономите и трафик и время; * создать target **UNWIRED_RANGE** в новом проекте можно просто скопировав файл `custom_targets.json` и каталог `TARGET_UNWIRED_RANGE` из уже существующего проекта; * вы в нашей лаборатории работаете за публичными компьютерами, поэтому по окончании работы **не забывайте выйти из своей учетной записи Mbed** ![mbedstudio_logout](/assets/images/iot-academy/mbedstudio_logout.png) [**^ К оглавлению**](iot/samsung) [danger]: /assets/images/iot-academy/danger.png