ESP8266 + Arduino + OpenWRT: проект температурного логера на датчиках DHT11 и DS18B20, пошаговое руководство

разделы: Интернет вещей, Arduino, дата: 19 декабря 2018г.

ESP8266 может работать в двух режимах: в режиме интерпретатора AT-команд или в режиме самостоятельного микроконтроллера с wifi модулем. Работу ESP8266 в режиме интерпретатора AT-команд я рассматривал в предыдущей статье, эта же статья рассматривает работу ESP8266 в качестве самостоятельного микроконтроллера.

Способов программирования ESP8266 опять же два, первый - это программирование с помощью ESP8266 фреймворка для Arduino IDE, второй - это программирование через esp-open-sdk. В первом случае мы можем использовать готовые библиотеки Arduino, во втором случае вы можем положиться только на функционал SDK и свой собственный код.

В этой статье мне хотелось бы рассмотреть программирование ESP8266 с помощью ESP8266 фреймворка для Arduino IDE. Данная тема решает широкий спектр задач обеспечения радиоканалом разного рода датчиков и простых устройств управления нагрузкой.

В качестве примера в статье рассматривается пошаговое написание прошивки для температурного логера на датчиках DHT11 и DS18B20. Первый датчик используется для определения комнатной температуры и влажности, второй используется для определения уличной температуры. Я статье используется плата ModeMCU ESP8266, т.к. там есть автозагузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F. Данные модули оснащены флеш-памятью на 4 мегабайта, что позволяет забыть о жёсткой оптимизации размера прошивки, когда борьба идёт за каждый байт.

При работе с ESP8266 есть выбор для использования его совместно с "облаками", собственным внешним сайтом, собственном сервером расположенным в интросети или автономной работой ESP826, когда веб-сервер запускается на самом ESP8266.

В данном проекте используется веб-сервер uhttpd на роутере с прошивкой OpenWRT. ESP8266 передаёт на него показания датчиков, а роутер их сохраняет и виде обычных файлов, и делает их доступными для просмотра через web-интерфейс. Можно дать новую жизнь старому смартфону или планшету настроив их на отображение таких web-страниц. Web-интерфейс универсален и может отображаться на любых браузерах любых устройств.

    Ссылки на полезные ресурсы и документацию:
  1. ESP8266 фреймворк для Arduino IDE
  2. Документация на библиотеку ESP8266WIFI
  3. Документация на Arduino библиотеку WiFi library

Содержание:

I. Начало работы с ESP8266 фреймворком для Arduino IDE

  1. Установка ESP8266 фреймворка для Arduino IDE
  2. Подключение датчика DHT11 к ESP8266
  3. Подключение датчика DS18B20 к ESP8266

II. Работа с библиотекой ESP8266WIFI

  1. Установка WiFi соединения
  2. Использование режима энергосбережения DeepSleep
  3. Класс WiFiClient, получение web-страницы от сервера на OpenWRT и отправка данных через GET запрос
  4. Отправка на web-сервер данных с датчика DHT11 через GET запрос
  5. Добавление датчика DS18B20
  6. Вывод показаний датчиков через веб-интерфейс
III. Добавлено позже

  1. Второй WiFi термометр на датчике AM2320 (добавлено 26.05.19г)

Читать дальше

Связь двух микроконтроллеров на примере подключения 4-х разрядного семисегментного индикатора к Arduino через вспомогательный микроконтроллер ATtyny13a

разделы: Arduino, AVR, UART, I2C, дата: 29 января 2018г.

Если под вашу задачу требуется большее число пинов/портов/мегагерц/памяти, чем имеется в используемом вами микроконтроллере, то в ответ на эту проблему обычно советуют взять микроконтроллер "покрупнее". Ответ не лишенный смысла, однако мне удалось найти задачку, от которой так просто не отмахнешься. Героем сегодняшней статьи будет 4-х разрядный семисегментный индикатор с динамической индикацией.

Я уже упоминал о нем в статье про сдвиговые регистры, но тогда у меня не было на руках самой железки, и соответственно говорил я лишь теоретически. Сами ардуинщики об индикаторе отзываются не очень лестно, т.к. применение этого индикатора ограниченное из-за того, что вследствие динамической индикации его нужно постоянно обновлять, что накладывает серьезное ограничение на основную программу. Теоретически эту задачу можно было бы "скинуть" в прерывание таймера, но решение это спорное.

В модуле меня привлекла его компактность. К примеру, для приборной панели паяльной станции, где место сильно ограничено, это то что надо. После некоторого размышления я решил, что в целом модуль неплох, но... для него требуется отдельный управляющий микроконтроллер, сопроцессор, на котором будет крутиться динамическая индикация.

Индикатор не содержит подтягивающих резисторов(!), возможно здесь используются сдвиговые регистры с подтяжкой? Так или иначе, я замерял потребление модуля через EnargyTrace и получил значение около 23mA при питании 3.3 Вольт, что для такой "гирлянды" вполне нормально.

Китайские ATtiny13a в SO-8 корпусе стоят около 15₽, они имеют пять рабочих выводов, три из которых нужно будет отдать на индикатор, остаются два вывода для организации линии связи, что более чем достаточно, но простенький SPI сюда не посадишь, т.к. тот SPI который будет использоваться для управления индикатором, работает мастером, а для связи с "главным" микроконтроллером нужен будет слейв( запускать слейв на главном микроконтроллере - это не вариант). К сожалению или к счастью(смотря как посмотреть), АTtiny13a не поддерживает аппаратно абсолютно никаких протоколов.

Т.о. перед нами стоит задача на ATtiny13a организовать c использованием не более двух пинов скоростную и надежную линию для приема двухбайтного числа от главного микроконтроллера, и отобразить его на 4-х разрядном семисегментном индикаторе. В идеале было бы использование аппаратного протокола главным микроконтроллером и его программной реализации на ATtiny13a. Также хотелось бы, что чтобы код реализации протоколов занимал минимально возможное место на флеше, чтобы его потом можно было использовать в других более сложных проектах.

    Оглавление статьи:
  1. Счетчик на ATiny13a и 4-х разрядном семисегментном индикаторе
  2. Простой протокол на счетчике импульсов
  3. Пакетная передача данных с использованием буфера
  4. Программный UART для ATtiny13a
  5. Программный I2C Slave на ATtiny13a

Т.к. подразумевается использование индикатора для отображения температуры паяльника, во всех примерах будут задействованы только три разряда индикатора.

Полные исходники вместе со сборочными файлами и скомпилированными прошивками можно скачать по ссылке к конце статьи.

Читать дальше

ATmega8 + PCF8574: 8-битный сдвиговой регистр на I2C интерфейсе

разделы: AVR, Arduino, I2C, HD44780, дата: 24 октября 2017г.

    Сдвиговые регистры, оглавление:
  1. ATmega8 + Proteus: работа со сдвиговыми регистром 74HC595
  2. ATmega8 + Proteus: входной сдвиговый регистр 74HC165, совместная работа с 74hc595
  3. ATmega8 + PCF8574: 8-битный сдвиговой регистр на I2C интерфейсе

Этот сдвиговый регистр наиболее известен по китайским драйверам дисплея HD44780, которые можно приобрести на али или ибэе. Сам регистр довольно подробно был разобран здесь: "Сообщество EasyElectronics.ru: I2C расширитель портов PCF8574". Я в свою очередь, попытаюсь сосредоточиться на программировании микроконтроллера ATmega8 для работы с этим регистром. Впрочем, начну я все же с Arduino и имеющегося у меня зоопарка: ATmega328/MSP430G2553/STM32F103C8.

Сдвиговый регистр PCF8574 может выпускаться разными фирмами, мне попались чипы с суффиксом "T", что обозначает производителя как "NXP Semiconductor". Руководство на pcf8574t можно скачать с официального сайта NXP: "PCF8574; PCF8574A Remote 8-bit I/O expander for I2C-bus with interrupt".

    Основные особенности сдвигового регистра PCF8574:
  1. Регистр 8-битный, псевдо-двунаправленный;
  2. Регистр работает на "медленной" I2C шине - 100 kHz;
  3. Рабочее напряжение от 2.5 до 6.0 Вольт;
  4. Регистр выпускается в двух вариантах: с суффиксом "A" и без него. Эти варианты различаются I2C адресам 0х3F для чипов с "A" и 0х27 для чипов без А.
  5. На шину можно ставить до восьми чипов одного варианта или шестнадцать чипов обоих вариантов.
  6. Регистры не соединяются последовательно в "паровозик" как 74HC595, они независимы друг к другу.

На мой взгляд, штука идеальная для подключения дисплея HD44780. Если сравнивать с драйвером на 595-м регистре, то вариант с pcf8574 будет немного дороже, но разница чисто условная: 25р за готовую плату на pcf8574 и ~19р за самодельный вариант на 595-м(3р за чип + 11р за плату + 5р за подстроечный резистор). Сам дисплей HD44780 не слишком скоростной, необходимости в скоростях SPI интерфейса нет. С другой стороны, драйвер на 595-м собирается из рассыпухи "на коленках" за полчаса-час, а посылка из Китая идёт от пары недель в лучшем случае.

Но внешне, готовый вариант все же будет выглядеть более культурно:

Читать дальше

Arduino: библиотеки для работы с RTC DS1307,DS3231

разделы: Arduino, STM32duino, RTC, дата: 18 сентября 2017г.

В завершении прошлой статьи я приводил ссылку для проверки I2C модуля RTC DS3231. Для этого не надо устанавливать никакие библиотеки, достаточно скопировать текст программы в Arduino IDE и кликнуть на загрузку скетча в микроконтроллер. Это одинаково работает как в Arduino IDE, так и в MSP430 Energia и STM32duino.

Однако, больше чем для проверки этот пример не годится, и рано или поздно перед каждым встает вопрос написания своей библиотеки для полноценной работы с RTC. Отчет времени, с календарем или без, довольно распространенная штука, и этот код вы скорее всего будете тащить из проекта в проект. Т.е. это вещь которую проще один раз хорошо сделать, что бы потом к этому не возвращаться.

Сам я уже прошел по этому пути, но т.к. написанный код уже не умещался под спойлерами, поэтому пришлось написать полноценную Arduino - библиотеку. В заключение будет несколько примеров с использованием этой библиотеки, с тем, как на мой взгляд нужно правильно работать с DS1307/DS3231.

Но прежде чем "городить огород", предлагаю взглянуть на готовые решения, одобренные "патриархами" arduino.cc, а именно: библиотеки Time, DS1307RTC, а также DS3232RTC которая работает совместно с библиотекой Time.

    Для начала решим, что нам нужно от RTC типа DS1307/DS3231:
  • Автономный отчет времени, т.е. когда микроконтроллер при старте получает текущее время, а затем он уже считает время самостоятельно и не забивает I2C шину трафиком с RTC.
  • Отчет времени по SQW-выводу, когда RTC тактирует счетчик часов микроконтроллера через внешнее прерывание, и микроконтроллер самостоятельно рассчитывает календарные данные и текущее время.
  • Поддержка будильников.
  • Поддержка внесения поправок к ходу часов.
  • Периодическая синхронизация.

Вроде бы немного, и вроде бы несложно.

Весь код я буду тестировать на Arduino Nano, MSP430 Launchpad - Energia и на STM32duino - Blue Pill.

Общая концепция библиотек для работы со временем такая. Имеется базовая библиотека TIME которая ведет через функцию millis() расчет времени при запросе такого через функции библиотеки hour(), minute(), second() и т.д. Библиотека абстрагируется от аппаратной части того или иного хронометра. Она рассчитана на ведение календаря и отчет времени средствами самого микроконтроллера, без подключения RTC. Соответственно библиотеки DS3232RTC и DS1307RTC добавляют функции синхронизации микроконтроллера с RTC.

Читать дальше

Arduino: FM-радиомодуль на микросхеме RDA5807m

разделы: Arduino, RDA5807M, дата: 2 апреля 2017г.

Данный модуль на Али торгуется по цене около 20р, и представляет собой полноценный сканирующий радиоприемник FM диапазона с управлением по I2C интерфейсу.

Здесь я расскажу как по-быстрому проверить его работоспособность с помощью Arduino, а также поделюсь той информацией о чипе, что мне известна на данный момент.

    На официальном сайте производителя заявлены следующие возможности чипа:
  1. CMOS single-chip fully-integrated FM tuner
  2. Low power consumption
  3. Support worldwide frequency band
  4. Support flexible channel spacing mode
  5. Support RDS/RBDS
  6. Digital low-IF tuner
  7. Fully integrated digital frequency synthesizer
  8. Autonomous search tuning
  9. Support 32.768KHz crystal oscillator
  10. Digital auto gain control (AGC)
  11. Digital adaptive noise cancellation
  12. Programmable de-emphasis (50/75 μs)
  13. Receive signal strength indicator (RSSI) and SNR
  14. Bass boost
  15. Volume control and mute
  16. Line-level analog output voltage
  17. 32.768 KHz 12M,24M,13M,26M,19.2M,38.4MHz Reference clock
  18. Only support 2-wire bus interface
  19. Directly support 32Ω resistance loading
  20. Integrated LDO regulator
  21. MSOP-10pins

Говоря по-русски, здесь нам обещают управление через I2C интерфейс(400KHz). Поддержку приема текстовых сообщений - RDS/RBDS(последний формат используется исключительно в США). Работа от часового кварца. Возможность прямого подключения 32-омных(плеерных) наушников. Индикация уровня сигнала - RSSI. Несколько диапазонов FM: Западная Европа, Восточная Европа, Япония, всемирный диапазон). Частотная коррекция(de-emphasis). Авто-регулировка усиления.

Чип предназначен для использования в сотовых телефонах, автомагнитолах, планшетах, ноутбуках, MP3 и MP4 плеерах.

Однако скачать datasheet с официального сайта не получится. Это видимо особенность всего китайского бизнеса(попробуйте найти datasheet на ESP8266). Неофициальное руководство на английском можно скачать например здесь.

Читать дальше

STM32duino - наследник проекта LeafMaple

разделы: STM32, Arduino, STM32duino, дата: 6 февраля 2017г.

Как я уже упоминал, проект LeafMaple после нескольких лет простоя свернулся, а его поддержку и развитие передали на сайт http://stm32duino.com/ который выполнен в виде форума. Впрочем, имеется там и Вики http://wiki.stm32duino.com.

Первым преимуществом STM32duino является то, что он поддерживает не только платы LeafMaple и их клоны, STM32duino можно установить на целый набор плат на stm32f103 а так же на stm32f4. Списки поддерживаемых плат, а также уровень их поддержки можно посмотреть в Вики.

Второй "плюс" проекта, то что там сделали таки драйвера для систем Windows 7 и выше. Т.е. то, что не могли сделать на leafmaple.com несколько лет.

Как следует из названия, в качестве IDE проект использует Arduino IDE, что упрощает жизнь, т.к. он поддерживает внешние IDE.

1) Установка загрузчика

Первым делом нужно будет прошить загрузчик. Напомню, что я работаю c клоном Maple Mini и в качестве программатора использую опять же клон ST-Link v2. Для тех кто использует Blue Pill и прошивает микроконтроллер через встроенный загрузчик, возможно будет полезна следующая статья: Дешевая STM32 плата + Arduino IDE UPD 15.07.2016.

Загрузчик для своей платы можно скачать здесь: https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/STM32F1/binaries. В случае с Maple Mini это - maple_mini_boot20.bin

Читать дальше

Магнитометр HMC5883L - калибровка и использование в Arduino

разделы: HMC5883L, Arduino, дата: 30 марта 2016г.


hmc5883l

Для навигации, роверу достаточно одного компаса что бы двигаться из точки А в точку В. Нужно лишь вычислить азимут, сделать разворот и проехать определенное расстояние по выбранному курсу.

В качестве электронного компаса может служить магнитометр HMC5883L. В данном посте я хочу разобрать документацию, процесс калибровки и программный код работы с датчиком под Arduino чтобы впоследствии портировать его под AVR/STM8/STM32.

Читать дальше

Использование MS Visual Studio Community 2015 в качестве среды разработки Arduino

разделы: Arduino, среда разработки, дата: 1 марта 2016г.


Visual Studio Community 2015 с плагином Visual Micro

Вопрос, о замене штатного Arduino IDE на что-то более приличное, рано или поздно, встает наверное перед всеми, кто всерьез подружился с Arudino. В свое время, я не скрою, что готов был отдать душу за нормальную среду разработки. Впоследствии, я много раз видел сообщения с критикой штатного IDE, что привело меня к мысли что тема более чем имеет право на жизнь. Однако, нельзя взять просто так notepad++ и начать писать на нем скетчи. Потому что эти скетчи еще нужно компилировать, загружать на микроконтроллер, отлаживать через терминал. Я знаю, что под Linux многие используют самописные Makefile. Пользователям Windows повезло больше и они могут использовать бесплатную MS Visual Studio Community 2015 в качестве Arduino IDE, с минимальными трудностями для себя. Реализует эту возможность плагин для MS Visual Studio Visual Micro. О нем и будет речь.

Читать дальше

RTC модули DS1307 и DS3231 на I2C шине

разделы: Arduino, RTC, дата: 16 сентября 2015г.


модули ds1307 и ds3231

Модули реального времени на DS1307 и DS3231 изготовлены в связке c EEPROM AT24 на 32Кбайта. Все эти устройства работают на I2C/TWI шине и работа с ними рассмотрена в книге Юрия Ревича "Практическое программирование микроконтроллеров AVR" в главе двенадцатой.

I2C шина позволяет на свои два провода подключить множество устройств, но это довольно медленный интерфейс, который, к тому же, еще и ограничен максимальной скоростью самого медленного устройства на шине. Для DS1307 это 100кГц. TWI интерфейс Atmel соответствует первой спецификации I2C, который был принят в начале 80-х фирмой Philips.

    Т.е. имеем ограничения:
  1. максимальное количество устройств - 127,
  2. максимальная скорость шины 400кГц.

Это если использовать аппаратный TWI. Если делать программную эмуляцию интерфейса, как рассмотрено в книге Юрия Ревича, то таких ограничений конечно же не будет.

Связка RTC модуля c EEPROM насколько понимаю довольно распространенное схемотехническое решение. Вариантов использования - множество. Например, контроллер сигналов домофона: нужно сделать так, что бы ночью он не трезвонил. Добавление EEPROM позволит вести вести логирование вызовов домофона. Повторюсь, вариантов множество.

Итак, рассмотрим DS1307 поподробнее:

Читать дальше

Подключение термопары К-типа к Arduino используя модуль на MAX6675

разделы: Arduino, MAX6675, дата: 3 сентября 2015г.

Подключение термопары К-типа(далее просто термопары) к Arduino довольно тривиально, но чтобы не было путаницы, решил написать краткий мануалЪ.

Термопары обычно применяются там где нужно измерить высокие температуры, у меня например она установлена в паяльнике, так же их ставят в бойлеры, газовые плиты с газ-контролем и т.д.

Работа термопары основана на термоэлектрическом эффекте, когда на спайке разнородных металлов образуется ЭДС, которая прямо пропорциональна температуре окружающей среды. Эту ЭДС возможно измерить, но она настолько маленькая, что так просто ее на вход микроконтроллера не подашь. На помощь приходит ИС от фирмы Maxim - MAX6675. Она измеряет ЭДС термопары и через SPI интерфейс выдает в виде готового числа. Документацию на микросхему можно найти например здесь: https://www.sparkfun.com/datasheets/IC/MAX6675.pdf

Документация содержит всего 8 страниц, предлагаю пробежаться глазами по основным моментам:

Читать дальше