Лабораторные работы по теме Интернет вещей. Лабораторная работа по датчику dht лабораторная работа по датчику давления bmp180
![]()
|
Лабораторные работы по теме Интернет вещей Знакомство со средой разработки Arduino IDE Разработка простейших электронных схем на базе макетной платы. Светодиод. Взаимодействие с контроллером Arduino через последовательный порт Подключение к WiFi с использованием микроконтроллера ESP8266 NodeMCU Разработка устройства для Alterozoom IoT на базе микроконтроллера Arduino Подключение устройства к приложению Alterozoom Лабораторная работа по датчику DHT Лабораторная работа по датчику давления BMP180 Работа с жидкокристаллическим дисплеем OLED 128x64 I2C (0.96 дюйма) Разработка метеостанции. Зачёт. 1. Знакомство со средой разработки Arduino IDE Знакомство со средой разработки Arduino IDE Цель работы Знакомство с базовыми функциями среды разработки Arduino IDE Задачи работы Установка среды разработки. Дополнительные настройки для ОС Linux. Подключение платы Arduino к среде. Загрузка примера из набора примеров. Управление библиотеками. Инструменты для выполения работы Компьютер с подключением к сети Internet. Плата Arduino с USB выходом. Теоретическая часть Платформа Arduino представляет собой семейство микроконтроллеров на базе процессоров Atmel, STM и ARM. Все микроконтроллеры программируются на языке C/C++ в среде разработки Arduino IDE. Большая часть плат Arduino (кроме маленьких, таких как micro, pro mini) имеют идентичное расположение выводов (пинов, pins) и позволяют подключать унифицированные сторонние модули, называемые шилдами (Shield). На всех платах имеется набор цифровых и аналоговых пинов, а так же интерфейсы SPI и I2C. Для работы со сторонними модулями в среде разработки имеется менеджер библиотек, куда собраны наиболее часто используемые для Arduino библиотеки.
Большинство микроконтроллеров имеют поддержку USB (встроенную либо вынесенную в отдельный преобразователь) и подключаются к операционной системе как последовательный порт. Последовательный порт (COM порт) - специальный порт для последовательной передачи данных между устройствами. Может быть аппаратным (специальный COM разъем на материнской плате ПК), либо эмулируется поверх другого аппаратного протокола (например, поверх USB, как в случае с Arduino). Последовательный порт используется для загрузки программы на микроконтроллер, а так же может использоваться для взаимодействия ПК и программы для микроконтроллера (в Arduino IDE по другому эта программа называется "скетч"). Скетч для микроконтроллера Arduino представляет собой файл с расширением .ino, содержащий код на языке C/C++ (https://ru.wikipedia.org/wiki/C%2B%2B). Код состоит из нескольких основных блоков: Подключения заголовочных файлов библиотек. Объявления глобальных переменных, констант, макроопределений. Определение пользовательских функций, структур и классов. Функция setup() - вызывается один раз в начале работы программы, в ней должна производится инициальзация контроллера - настройка пинов, запуск последовательного порта, SPI и I2C интерфейсов. Функция loop() - вызывается микроконтроллером в бесконечном цикле, в ней производится основная работа. После загрузки на микроконтроллер программа созраняется даже после отключения Arduino, до тех пор, пока она не будет перезаписана новой программой. Выполнение работы Установка среды разработки Открываем веб-браузер, заходим на https://www.arduino.cc/en/Main/Software и скачиваем нужную версию среды разработки для установленной на ПК операционной системы. На момент написания лабораторной работы последняя версия 1.8.5. Запускаем установщик для ОС Windows или распаковываем архив. Дополнительные настройки для ОС Linux Для того, чтобы была возможность подключить плату к среде разработки на ОС Linux, необходимо добавить пользователя в группу dialout. Это можно сделать либо при помощи стандартного интерфейса управления пользователями и группами (если присутствует), либо командой $ sudo usermod -aG dialout Подключение платы к среде разработки Подключаем плату к ПК USB кабелем. В среде разработки указываем нужную плату (на плате указано ее наименование): ![]() Далее указываем нужный порт: ![]() (На ОС Windows будут названия портов вида COM1, COM2, и т.д.) Вызвав пункт меню "Инструменты -> Get board info", можно проверить, что на выбранном порту действительно находится нужная плата. Примечание: как определить нужный порт? Самый простой способ: отключаем плату от ПК, смотрим список портов. Подключаем плату обратно и снова смотрим список портов. Появившийся порт, которого раньше не было - тот, который нужен. Загрузка примера из набора примеров Выбираем из библиотеки примеров скетч Blink (Файл -> Примеры -> 0.1Basics -> Blink). Проверяем выбранный порт и плату. Нажимаем кнопку Загрузить ( ![]() Управление библиотеками Иногда в процессе работы возникает необходимость подключения к скетчу сторонних библиотек, например, для работы с различными датчиками. Библиотека представляет собой набор заголовочных и файлов (с расширением .h) и файлов с исходным кодом (расширение .c или .cpp). При подключении библиотеки в скетч добавляются подключения нужных заголовочных файлов (строки вида #include <...>). Для примера, подключим одну из стандартных библиотек Wire. Выбираем "Скетч -> Подключить библиотеку -> Wire". При этом IDE автоматически добавит изменения в скетч, необходимые для подключения библиотеки. В верху файла скетча должна появиться строка: #include Использвать данную библиотеку мы будет позднее в работах по взаимодействию с некоторыми датчиками. Сразу после установки в среде разработки уже доступен базовый набор библиотек (в том числе Wire из примера выше). Остальные библиотеки сначала нужно загрузить в IDE, для этого используется менеджер библиотек. Выбираем пункт меню "Скетч -> Подключить библиотеку -> Управление библиотеками". В менеджере присутствует множество библиотек для работы с различными модулями/протоколами и т.п. После загрузки библиотеки она становится доступна для подключения к скетчу. ![]() В верхгнй части менеджера находятся два поля фильтрации по типу и теме, а так же поле текстового поиска по наванию и описанию библиотеки. При выборе библиотеки в списке становится доступна кнопка "Установка", для некоторых библиотек так же можно выбрать версию, если есть несколько версий. 2. Светодиод Светодиод Цель работы Знакомство с принципами разработки простейших электронных схем на базе макетной платы Задачи работы Разработать скетч для мигания светодиодом церез цифровой пин №4 на плате Arduino. Собрать схему со светодиодом на макетной плате. Инструменты для выполения работы Компьютер с подключением к сети Internet. Плата Arduino с USB выходом (например, Arduino Leonardo). Макетная плата для беспаечного монтажа. Светодиод. Резистор на 220 Ом. Провода. Теоретическая часть Цифровые пины на микроконтроллерах Arduino могут работать в трех режимах: INPUT, INPUT_PULLUP и OUTPUT. В режиме OUTPUT можно программно устанавливать на пине цифровой сигнал с помощью функции digitalWrite. Для установки уровня используются предопределенные константы HIGH и LOW. Принято, что HIGH обозначает высокий уровени напряжения (3.3 или 5 вольт в зависимости от рабочего напряжения платы), а LOW - низкий (около 0). При этом возможно питание устройств с потреблением тока до 40 мА. В режиме INPUT можно подавать цифровой сигнал на пин и программно считывать его в микроконтроллере с помощью функции digitalRead. При считывании логического значения будет получено значение HIGH, если уровень поданного на пин напряжения выше 2 вольт для 3.3 вольтовой платы и 3 вольт для 5 вольтовой платы. Для установки режима работы цифрового пина используется функция pinMode. Задание: описать, как работает и для чего нужен режим INPUT_PULLUP Для разработки простых электронных схем часто используются макетные платы. Они бывают двух основных видов - для пайки и для беспаечного монтажа. ![]() ![]() В данной работе предполагается использование платы для беспаечного монтажа. Контакты этой платы соединены внутри особым образом, как показано на рисунке: ![]() Выполнение работы Разработка скетча для мигания светодиодом церез цифровой пин №4 на плате Arduino Создаем новый скетч (Файл -> Новый или кнопка ![]() ![]() Для управления светодиодом через цифровой пин нужно выполнить два действия: 1. Настроить цифровой пин в функции setup(): pinMode(4,OUTPUT); 2. В функции loop менять состояние пина с задержкой таким образом, чтобы получить эффект мигания: digitalWrite(4,HIGH); delay(1000); digitalWrite(4,LOW); delay(1000); Задание: перечислите функции стандартной библиотеки для работы со временем с описанием их работы (в том числе используемую в скетче функцию delay) millis() Описание Возвращает количество миллисекунд, прошедших с момента старта программы Ардуино. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 50 дней. micros() Описание Возвращает количество микросекунд, прошедших с момента начала выполнения программы Arduino. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 70 минут. На платах Arduino с тактовой частотой 16 МГц (Duemilanove и Nano) разрешение этой функции составляет четыре микросекунды (т.е. возвращаемое значение будет всегда кратно четырем). На платах Ардуино с тактовой частотой 8 МГц (LilyPad), разрешение функции составляет восемь микросекунд. Примечание: в одной миллисекунде 1000 микросекунд, а в одной секунде - 1 000 000 микросекунд. delay() Описание Приостанавливает выполнение программы на указанный промежуток времени (в миллисекундах). (В 1 секунде - 1000 миллисекунд.) Синтаксис ?
delayMicroseconds() Описание Приостанавливает выполнение программы на указанный промежуток времени (в микросекундах). В одной миллисекунде 1000 миллисекунд, и 1 000 000 микросекунд. На данный момент наибольшее число, позволяющее сформировать точную задержку, - 16383. В будущих версиях Ардиуно этот показатель может быть изменен. Для создания задержек длительностью больше, чем несколько тысяч микросекунд, используйте функцию delay(). Сборка схемы со светодиодом на макетной плате Для того, чтобы мигать светодиодом, нужно собрать схему, в которой светодиод подключен последовательно с резистором на 220 Ом, чтобы не сжечь светодиод. Соберите схему: ![]() Загрузите скетч на плату, убедитесь, что светодиод мигает. Если он не мигает, попробуйте перевернуть его (поменять местами ножки). 3. Взаимодействие с контроллером Arduino через последовательный порт Взаимодействие с контроллером Arduino через последовательный порт Цель работы Научиться взаимодействовать с контроллером Arduino через последовательный порт. Задачи работы Разработка скетча для управления встроенным светодиодом на плате через последовательный порт. Знакомство с монитором последовательного порта. Оповещение о переключении светодиода. Инструменты для выполнения работы Компьютер. Плата Arduino с USB выходом и встроенным светодиодом на 13-м порту. Теоретическая часть Для программного взаимодействия с последовательным портом предназначены объекты стандартной библиотеки Arduino под названиями Serial, Serial1, Serial2 и т.д. Как правило, на каждой плате есть один последовательный порт, которому соответствует объект Serial. Данный порт при подключении к ПК позволяет обмениваться данными с компьютером поверх USB. Если микроконтроллер от компьютера отключен, то Serial позволяет обмениваться данными с другими устройствами через цифровые пины 0 и 1. Исключение составляет только Arduino Leonardo, у которой Serial всегда используется для взаимодействия через USB, а для цифровых пинов 0 и 1 используется отдельный объект Serial1. Задание: соберите информацию о том, у каких микроконтроллеров есть дополнительные объекты для последовательных портов (Serial1, Serial2 и т.д.) и к каким пинам они подключены. Выполнение работы Разработка скетча для управления светодиодом на плате через последовательный порт Создаем новый скетч и сохраняем его с названием SerialTest. Проверяем, что выбрана правильная плата и порт. В функции setup() инициализируем последовательный порт и 13-й пин для управления светодиодом: Serial.begin(9600); pinMode(13,OUTPUT); В функции loop() проверяем, нет ли данных в последовательном порту. Читаем данные, и если пришел символ "1", включаем светодиод, во всех остальных случаях выключаем: while(Serial.available()) digitalWrite(13,(Serial.read()=='1')?HIGH:LOW); Знакомство с монитором последовательного порта Открываем монитор последовательного порта (Инструменты -> Монитор порта или кнопка ![]() ![]() В данном окне выводится информация, поступающая от контроллера. В верхней строке слева от кнопки "Отправить" можно писать текст, который отправляется на контроллер. В нижнем правом окне настраивается скорость передачи данных и указывается, будет ли к тексту добавляться символ перевода строки NL, CR или оба сразу, или текст будет отправлен как есть. Для данной работы нужно выставить режим "Нет конца строки". Оповещение о переключении светодиода Доработаем скетч так, чтобы в мониторе порта отображалась информация о переключении светодиода. Для этого поменяем код функции loop(): while(Serial.available()) { char c=Serial.read(); if(c=='1') { digitalWrite(13,HIGH); Serial.println("Led On"); } else { digitalWrite(13,LOW); Serial.println("Led Off"); } } Проверяем монитор порта и проверим, что теперь при переключении светодиода отображаются оповещения. Дополнительное задание: разработать скетч для управления светодиодом через последовательный порт командами "on" и "off". Подсказка: метод Serial.read() возвращает только один символ, если от ПК пришло несколько символов, то тело цикла while(Serial.available()) выполнится несколько раз.
4. Подключение к WiFi с использованием микроконтроллера ESP8266 NodeMCU Подключение к WiFi с использованием микроконтроллера ESP8266 NodeMCU Цель работы Научиться подключаться к WiFi сети с микроконтроллера Arduino и передавать данные по WiFi. Задачи работы Добавить поддержку микроконтроллера NodeMCU на базе WiFi-модуля ESP8266 Разработать скетч для подключения к WiFi сети и передачи данных по беспроводному каналу связи. Инструменты для выполения работы Компьютер с подключением к сети Internet Микроконтроллер NodeMCU V3 на базе EPS8266-12E Теоретическая часть Плата NodeMCU построена на базе модуля WiFi ESP8266. ![]() Распиновка платы: ![]() Для работы с этой платой была добавлена поддержка среды разработки Arduino IDE. Практически все библиотеки для обычной Arduino так же работают и для этой платы, однако ее распиновка отличается от распиновки плат Arduino. Так, на плате есть один аналоговый вход (A0), на котором работает 10-битный АЦП. Цифровым пинам 0-15 Arduino соответствуют выходы, обозначенные GPIO1-GPIO16. Например, если в Arduino IDE используется пин 12, ему будет соответствовать контакт, обозначенный на плате как D6 (GPIO12). Пины GPIO1 — GPIO5, GPIO10, GPIO12-GPIO15 поддерживают ШИМ. Характеристики платы: поддержка WiFi протоколов 802.11 b/g/n Wi-Fi Direct (P2P), soft-AP встроенный стек TCP/IP SDIO 2.0, SPI, UART встроенный PLL, регуляторы, и система управления питанием Номинальное напряжение: 3,3 В Входное напряжение: 3,7–20 В Максимальный потребляемый ток: 220 мА D9, D10 — UART D1, D2 — I²C (D1 - SCL(SCK), D2 - SDA) D5–D8 — SPI Основной сайт проекта: https://github.com/esp8266/Arduino Выполнение работы Добавление поддержки микроконтроллера NodeMCU на базе WiFi-модуля ESP8266 Для добавления поддержки NodeMCU в среду Arduino IDE нужно выполнить следующие шаги: Открываем настройки (Файл -> Настройки) Находим дополнительные ссылки для менеджера плат и нажимаем справа кнопку редактирования (выделена на скриншоте) ![]() Добавляем URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json Сохраняем и заходим в менеджер плат (Инструменты -> Плата: -> Менеджер плат) ![]() Вводим в поиск "esp8266" и устанавливаем пакет esp8266 Создаем новый скетч и сохраняем его как Esp8266Test. Выбираем плату "NodeMCU 1.0 (ESP-12E Module)" (Инструменты -> Плата:). Ниже в меню "Инструменты" вводим настройки для CPU Frequency, Flash Size и Upload Speed как показано на скриншоте (скорее всего, будут стоять именно такие, если плата отличается от изображенной выше, настройки могут отличаться). ![]() Выбираем нужный порт. Разработка скетча для подключения к WiFi сети и передачи данных по беспроводному каналу связи. Скетч для работы с WiFi используем библиотеки, аналогичные стандартной библиотеке WiFi для обычных Arduino. При работе с обычной Arduino и каким-либо WiFi шилдом будут подключаться аналогичные заголовочные файлы, только без префикса "ESP8266". Подключаем заголовочные файлы #include #include Указываем параметры WiFi сети const char *essid="WIFI_ESSID"; const char *key="WIFI_KEY"; WIFI_ESSID и WIFI_KEY заменяем на имя и пароль используемой WiFi сети. В функции setup() запускаем Serial и подключаемся к WiFi Serial.begin(9600); WiFi.begin(essid,key); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); В функции loop выполняем GET запрос на WEB-страницу удаленного сервера. Для этого подключаемся к серверу WiFiClient client; if(!client.connect("wl.unn.ru",80)) { Serial.println("connection failed"); return; } Отправляем сгенерированный вручную GET запрос client.print("GET /laboratory/?page=1 HTTP/1.1\r\nConnection: close\r\n\r\n"); Ждем ответа от сервера unsigned long timeout = millis(); while(client.available()==0) { if(millis()-timeout>5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; } } Выводим ответ и спим 10 секунд while(client.available()) { String line=client.readStringUntil('\r'); Serial.print(line); } delay(10000); Загружаем скетч на плату и открываем менеджер порта. Там раз в десять секунд должен появляться код веб-страницы, пришедший в ответ от сервера wl.unn.ru. Дополнительное задание: разработать скетч для сканирования доступных WiFi сетей
|