Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 5

Robotdyn наносит двойной удар: mega + esp8266

Элементы платы

Мозг платформы

Troyka Wi-Fi основан на модуле ESP-12 с чипом ESP8266EX от Espressif.

Чип ESP8266EX

Чип ESP8266 — выполнен по технологии SoC (англ. System-on-a-Chip — система на кристалле). В основе кристалла входит процессор семейства Xtensa — 32-х битный Tensilica L106 с частой 80 МГц с ультранизким энергопотреблением, радиочастотный трансивер с физическим уровнем WiFi IEEE 802.11 b/g/ и блоки памяти SRAM. Мощности процессорного ядра хватает для работы сложных пользовательских приложений и цифровой сигнальной обработки.

Программное приложение пользователя должно храниться на внешней микросхеме Flash-памяти и загружаться в через один из доступных интерфейсов (SPI, UART, SDIO и др.) каждый раз в момент включения питания системы.

Чип ESP8266 не содержит в себе Flash-память и многих других компонентов для пользовательского старта. Микросхема является основой на базе которой выпускаются модули с необходимой периферией, например ESP-12.

Модуль ESP-12

Рядом с кожухом расположен индикаторный светодиод и миниатюрная антенна из дорожки на верхнем слое печатной платы в виде змейки. Металлический кожух экранирует компоненты модуля и тем самым улучшает электромагнитные свойства.

По периметру платы расположены 22 пина через которые модуль ESP-12 взаимодействует с внешним миром. В нашем случае коммуникация с компонентами и модулями на платформе Troyka Wi-Fi.

Troyka контакты

Первая группа

  • Сигнальный (TX) — цифровой выход Wi-Fi модуля. Используется для передачи данных в микроконтроллер. Подключите к пину RX микроконтроллера.
  • Питание (V) — соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — соедините с пином GND микроконтроллера.

Вторая группа

  • Сигнальный (P) — используйте для перевода модуля в режим сна. Подключите к любому цифровому пину микроконтроллера.
  • Сигнальный (RX) — цифровой вход Wi-Fi модуля. Используется для приёма данных из микроконтроллера. Подключите к пину TX микроконтроллера.

Дополнительные контакты

Через Troyka-контакты вы можете получить доступ к , , , и пину модуля ESP-12. Для этого достаточно капнуть припой на контактные площадки с обратной стороны устройства.

Обратите внимание, на плате версии и ниже, шёлк на контактах и перепутан местами.

Светодиодная индикация

Имя светодиода Назначение
RX и TX Мигают при обмене данными между Wi-Fi модулем и управляющим устройством.
POWER Горит, если на модуль подано питание

Кнопка служит для перевода модуля в режим прошивки:

  1. Зажмите кнопку ;
  2. Нажмите и отпустите кнопку ;
  3. Отпустите кнопку

Стабилизатор напряжения

Стабилизатор MC33275ST-3.3T3G с выходом 3,3 вольта, обеспечивает питание модуля ESP-12. Максимальный выходной ток составляет 300 мА.

На плате так же присутствует необходимая обвязка для сопряжения устройств с разными питающими напряжениями.

В нашем случае это может быть управляющая плата Arduino с 5 вольтовой логикой и Wi-Fi модуль с 3,3 вольтовой логикой.

Аппаратная часть

В качестве контроллера было решено использовать дешевый и популярный ESP8266. Он отлично подходил для моих целей, кроме одного момента: согласования уровней сигналов 5-вольтовых датчиков с 3.3 вольтовой логикой контроллера. В принципе, датчики Dallas вроде бы работают и на 3 вольтах, но у меня от контроллера до датчиков достаточно длинная линия, около 7 метров. Поэтому лучше напряжение повыше.

Было определено, что необходимо иметь по «железу»:

  • Контроллер ESP8266 или его старший брат ESP32 (в виде модуля DevKit).
  • Согласование уровней сигналов для датчиков.
  • Регулятор питания 5-вольтовой частью схемы.
  • Модуль управления реле.
  • Часы RTC + флеш память для записи логов.
  • Простейший 2-строчный LCD дисплей для отображения текущих значений датчиков и состояния прибора и реле.
  • Несколько физических кнопок, для управления состоянием устройства без доступа через web.

Многие компоненты из списка продаются в виде модулей для Arduino и многие модули совместимы с логикой 3.3в. Однако «слепливать» все это на макетной плате пучками проводов не хотелось, ведь хочется иметь аккуратный красивый «девайс». Да и за деньги, отданные китайцам за модули можно вполне нарисовать и заказать свою индивидуальную печатную плату, а ожидание её приезда будет компенсировано сравнительно быстрым и надежным монтажом.

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

Графики

При запросе через встроенный веб-сервер данные логгинга читаются в бинарном виде с помощью JavaScript:

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

По этой же причине, для построения графиков используется JavaScript библиотека jqPlot, а сами файлы JS библиотек подгружаются с популярных CDN.

Пример графика работы устройства:

Наглядно видно, что около 9:35 устройство было включено на подогрев, котел плавно начал нагревать контур отопления (датчики T3, T4), вслед за этим начала расти температура контура бассейна (датчики T1, T2). Где-то около 10:20 котел переключился на нагрев горячей воды в доме, температура контура отопления упала. Затем еще через 10 минут котел вернулся к нагреву воды бассейна. В 10:50 произошла авария: внезапно отключили насос циркуляции воды в бассейне. Поток воды резко упал до ноля, реле нагрева выключилось (красный пунктир на 2м графике), предотвращая перегрев. Но устройство по-прежнему осталось в состоянии нагрева (красная линия на 2м графике). Т.е. если бы насос был снова был включен, и температуры были бы в норме, устройство вернулось бы к нагреву. Замечу, что после аварийного выключения насоса, температуры в контуре воды бассейна (T1, T2) начали резко расти за счет перегрева теплообменника. И если бы не резкое отключение котла, была бы беда.

Подключение через Software Serial

Позволяет подключить модуль к произвольным контактам микроконтроллера. Какие контакты использовать, необходимо указать в панели настроек подключения модуля. Так же в панели настроек указывается скорость передачи данных для порта. Модуль ESP8266 по умолчанию настроен на скорость 115200 бит/сек. Для работы через SoftwareSerial необходимо предварительно настроить скорость передачи данных ESP8266 на более низкую скорость. Стабильная работа модуля возможна на скорости не более 19200 бит/сек. Для изменения скорости работы последовательного интерфейса модуля, необходимо его подключить к консоли для возможности выполнения AT команд. Скорость работы модуля может быть изменена при помощи AT команды «AT+UART_DEF=19200,8,1,0,0».

Есть некоторые ограничения на использование контакта RX для плат Arduino. Ограничения связаны с поддержкой прерываний на соответствующих контактах микроконтроллера.

  • Arduino UNO и Nano для RX нельзя использовать контакт 13(LED);
  • Arduino Mega и Mega2560 для RX можно использовать только следующие контакты: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8(62), A9(63), A10(64), A11(65), A12(66), A13(67), A14(68), A15(69);
  • Arduino Leonardo и Micro для RX можно использовать только следующие контакты: 8, 9, 10, 11, 14, 15, 16;

Так же при использовании SoftwareSerial вы должны принять следующие ограничения:

  • Нет возможности работы на больших скоростях передачи данных. Не рекомендуем использовать скорость соединения более 19200 бит/сек.
  • Некоторые библиотеки, которые так же используют прерывания, могут работать не корректно, или же их использование может сделать неработоспособным данный способ подключения. Например библиотека Servo будет подергивать сервоприводы.

Пример подключения модуля ESP8266 для SoftwareSerial к контактам 2(RX) и 3(TX) на рисунке

Обратите внимание, что необходимо контакты подключить перекрестием, т.е. контакт Arduino 2(RX) к контакту TX модуля, и контакт 3(TX) к контакту RX модуля

Постановка задачи

Я живу в частном доме под Минском, и собственный бассейн, пусть и простейший каркасный, является неотъемлемой частью того набора «бенефитов», который получают многие, живущие в загородном доме. В нашем нестабильном климате оказалось, что в бассейне купаться некомфортно, если он стоит на открытом воздухе: вода выхолаживается ночью, а ветренная погода днем не делает купание комфортным. В прошлом году я своими руками построил геодезический купол фуллера над бассейном, поставил горочку и повесил тарзанку – дети довольны.

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

На лето «отопительный» контур котла с помощью вентилей переключается на подогрев
бассейна. Подогрев воды бассейна осуществляется с помощью титанового теплообменника, по первичному контуру которого проходит теплоноситель (горячая вода без примесей) из отопительного контура, а по вторичному – вода из бассейна, нагнетаемая насосом рециркуляции системы фильтрации. Поскольку бассейн я использую с хлоратором (много интересного по теме расписано на ForumHouse), в воде содержится немного соли и теплообменник нужен титановый. Нельзя просто так взять и пустить воду напрямую через котел – иначе все трубы разъест солью.

Проходя через теплообменник, теплоноситель, нагретый котлом, с температурой около 70-90 °C отдает тепло воде из бассейна, нагревая ее на пару градусов. Сам теплоноситель при этом остывает на пару десятков градусов, и возвращается в котел с тем, чтобы быть снова
подогретым. Соотношение остывания воды от котла с нагревом воды бассейна зависит от многих факторов: мощности теплообменника и скорости циркуляции воды в первичном и вторичных контурах.

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

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

Необходимо предусмотреть возможность защиты перегрева теплообменника.

Что нового

  • 20.05.20 — Добавлена отправка изображения с esp32 cam в ICQ
  • 20.05.20 — Добавлена поддержка управления через ICQ
  • 10.05.20 — Добавлена опция BT HUB на ESP32 для чтения Bluetooth датчиков и других устройств
  • 02.05.20 — У TFT добавлен поворот на 180 и поддержка нескольких разрешений дисплеев
  • 30.04.20 — Добавлена поддержка нескольких MCP23017
  • 07.04.20 — Добавлена поддержка ICQ в RTOS прошивках
  • 29.02.20 — Добавлен метеосервис OpenWeatherMap
  • 22.02.20 — Добавлены новые параметры i и m в опции ModBus мастер
  • 18.02.20 — Рефакторинг опции LCD дисплея. Добавлен русский язык и перенос по enter
  • 15.02.20 — У датчиков DS18B20 увеличено количество знаков после запятой на esp8266
  • 15.02.20 — Крупный рефакторинг кода на esp8266 — возможны ошибки
  • 09.02.20 — У датчиков DS18B20 увеличено количество знаков после запятой на RTOS прошивках
  • 09.02.20 — Крупный рефакторинг кода на RTOS прошивках — возможны ошибки
  • 01.02.20 — Датчик DS18B20 сейчас может работать через I2C конвертер DS2482
  • 26.01.20 — Добавлена отправка изображения с esp32 cam в Telegram
  • 19.01.20 — Добавлена возможность отправки изображения на сервер из esp32 cam
  • 20.12.19 — Lora Node: Сейчас шаблон отправки задается на вкладке lora
  • 04.12.19 — На RTOS прошивках имеются небольшие изменение в интерфейсе настройки и добавлена поддержка ОТАА и плана частот
  • 02.11.19 — Добавлена поддержка «не съезжающих» настроек на esp8266
  • 19.10.19 — Добавлен экспорт/импорт настроек ESP32 и ESP8266 RTOS
  • 12.10.19 — Добавлено «не съезжающее» хранение настроек ESP32 и ESP8266 RTOS
  • 03.10.19 — Добавлен новый вариант веб сервера на ESP32 и ESP8266 RTOS
  • 25.07.19 — Добавлены логические выражения в текстовых опциях
  • 20.07.19 — Добавлена поддержка ModBus на ESP8266
  • 09.05.19 — Добавлены датчики HDC1080(влажность) и PMS5003 (пыль)
  • 24.01.19 — Исправление опции Narodmon.ru get связанное с большими числами ID
  • 04.01.19 — Добавлена опция ModBus master с базовыми функциями на ESP32
  • 17.12.18 — Добавлена опция энкодера с базовыми функциями
  • 17.11.18 — Значительно расширены возможности Interpreter до версии 2
  • 04.11.18 — На опции GPIO Keys сейчас доступна ручная установка полярности
  • 03.11.18 — Добавлена поддержка EEPROM в проект
  • 28.10.18 — Добавлена поддержка MAX31865 для подключения аналоговых датчиков pt100/pt1000
  • 09.10.18 — Прошивку на Nextion сейчас можно загружать через веб интерфейс ESP32
  • 07.10.18 — Значительно расширен функционал работы дисплеев Nextion
  • 14.09.18 — Добавлена опция UART HTTP bridge для подключения внешнего м/к с пробросом веб, датчиков и gpio
  • 19.08.18 — Добавлена опция GPIO Keys для управления через кнопки, в том числе и через долгое нажатие
  • 15.07.18 — Исправлена работа опции Gismeteo на ESP8266
  • 10.06.18 — Добавлена поддержка NetBIOS, MDNS и СaptiveРortal на модулях ESP32
  • 10.03.18 — Добавлена поддержка LoRa на модулях ESP8266, идет отладка
  • 19.02.18 — Добавлена поддержка вывода названия текущего трека в опции интернет радио
  • 19.02.18 — Добавлена поддержка сервоприводов через ШИМ PCA9685
  • 18.02.18 — Добавлена поддержка 16 канального ШИМ PCA9685
  • 15.02.18 — Добавлен одно-канальный i2C ЦАП MCP4725
  • 08.02.18 — MP3/WAV плеер выделен в отдельную опцию
  • 06.02.18 — TFT дисплей на ESP32 сейчас может выводить JPG и BMP картинки
  • 05.02.18 — В опции Sonoff POW появилась калибровка напряжения и тока

WiFi library

The firmware for the WiFi shield has changed in Arduino IDE 1.0.5. You are recommended to install this update per these instructions

With the Arduino WiFi Shield, this library allows an Arduino board to connect to the internet. It can serve as either a server accepting incoming connections or a client making outgoing ones. The library supports WEP and WPA2 Personal encryption, but not WPA2 Enterprise. Also note, if the SSID is not broadcast, the shield cannot connect.

Arduino communicates with the WiFi shield using the SPI bus. This is on digital pins 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used as SS. On the Mega, the hardware SS pin, 53, is not used but it must be kept as an output or the SPI interface won’t work. Digital pin 7 is used as a handshake pin between the Wifi shield and the Arduino, and should not be used.

The WiFi library is very similar to the Ethernet library, and many of the function calls are the same.

For additional information on the WiFi shield, see the Getting Started page and the WiFi shield hardware page.

To use this library

Examples

  • ConnectNoEncryption : Demonstrates how to connect to an open network
  • ConnectWithWEP : Demonstrates how to connect to a network that is encrypted with WEP
  • ConnectWithWPA : Demonstrates how to connect to a network that is encrypted with WPA2 Personal
  • ScanNetworks : Displays all WiFi networks in range
  • WiFiChatServer : Set up a simple chat server
  • WiFiWebClient : Connect to a remote webserver
  • WiFiWebClientRepeating : Make repeated HTTP calls to a webserver
  • WiFiWebServer : Serve a webpage from the WiFi shield
  • WiFiSendReceiveUDPString : Send and receive a UDP string
  • UdpNTPClient : Query a Network Time Protocol (NTP) server using UDP

Last revision 2019/12/24 by SM

WiFi class

The WiFi class initializes the ethernet library and network settings.

  • begin()
  • disconnect()
  • config()
  • setDNS()
  • SSID()
  • BSSID()
  • RSSI()
  • encryptionType()
  • scanNetworks()
  • status()
  • getSocket()
  • macAddress()

The IPAddress class provides information about the network configuration.

  • localIP()
  • subnetMask()
  • gatewayIP()

Server class

The Server class creates servers which can send data to and receive data from connected clients (programs running on other computers or devices).

  • Server
  • WiFiServer()
  • begin()
  • available()
  • write()
  • print()
  • println()

Client class

The client class creates clients that can connect to servers and send and receive data.

  • Client
  • WiFiClient()
  • connected()
  • connect()
  • write()
  • print()
  • println()
  • available()
  • read()
  • flush()
  • stop()

UDP class

The UDP class enables UDP message to be sent and received.

  • WiFiUDP
  • begin()
  • available()
  • beginPacket()
  • endPacket()
  • write()
  • parsePacket()
  • peek()
  • read()
  • flush()
  • stop()
  • remoteIP()
  • remotePort()

Прошивка

В большинстве случаев намного удобней прошивать МК и работать с ним со своей прошивкой. Однако тут тоже есть свои нюансы. Вот 3 варианта событий:

  • У вас «голый» ESP8266, например ESP-01. Вам потребуется USB-UART переходник, который нужно подключить к МК. Этот переходник обязательно должен быть на 3-вольтовой логике, т. к. иначе можно легко отправить ваш МК в кибер-Вальхаллу. Про процесс подключения можно прочитать здесь.
  • Второй случай идентичен первому, кроме того, что вместо переходника можно использовать любую плату Arduino. Достаточно специальным образом подключить ESP8266 к UART-контактам Arduino, а её саму «отключить», замкнув контакт аппаратного сброса (RESET) на землю. Естественно, питать ESP8266 нужно будет от шины питания 3.3 В. В этом случае в качестве переходника USB-UART будет выступать мост (чаще всего CH340) на самой плате Arduino. Этот процесс также описан в статье выше.
  • Лучший вариант — это плата с USB-UART мостом на борту (как NodeMCU, WeMos и прочие). В этом случае ничего дополнительного делать не нужно — просто подключайте плату через USB.

WiFi Web Server

In this example, you will use the WiFi module of your board to create a simple Web server. Using the WiFi 1010 library, your device will be able to answer a HTTP request received from the WiFI connection. After opening a browser and navigating to your WiFi’s IP address, your board will respond with just enough HTML for a browser to display the input values from all six analog pins.

This example is written for a network using WPA encryption. For WEP or WPA, change the Wifi.begin() call accordingly.

Circuit

The WiFi module is integrated on your board and you don’t need any special circuitry to get this tutorial to work.

Please note: these three boards use dedicated pins to communicate and select the WiFi module, therefore you have no restriction in the usage of the available digital pins connected to the header pins.

Code

You should have access to a 802.11b/g wireless network that connects to the internet for this example. You will need to change the network settings in the sketch to correspond to your particular networks SSID.

For networks using WPA/WPA2 Personal encryption, you need the SSID and password. The shield will not connect to networks using WPA2 Enterprise encryption.

WEP network passwords are hexadecimal strings known as keys. A WEP network can have 4 different keys; each key is assigned a «Key Index» value. For WEP encrypted networks, you need the SSID, the key, and key number.

See Also:

  • WiFi NINA library – Your reference for the WiFi NINA Library.
  • AP_SimpleWebServer : A simple web server to manage a LED with AP feature
  • ConnectNoEncryption : Demonstrates how to connect to an open network
  • ConnectWithWEP : Demonstrates how to connect to a network that is encrypted with WEP
  • ConnectWithWPA : Demonstrates how to connect to a network that is encrypted with WPA2 Personal
  • ScanNetworks : Displays all WiFi networks in range
  • ScanNetworksAdwanced : Displays all WiFi networks, also the encrypted ones, in range
  • SimpleWebServerWiFi : A simple web server to manage a LED
  • WiFiChatServer : Set up a simple chat server
  • WiFiPing : Demonstrates how to ping a website or IP address
  • WiFiSSLClient : Connect to a website using SSL
  • UdpNTPClient : Query a Network Time Protocol (NTP) server using UDP
  • WiFiUdpSendReceiveString : Send and receive a UDP string
  • WiFiWebClient : Connect to a remote webserver
  • WiFiWebClientRepeating : Make repeated HTTP calls to a webserver

Last revision 2018/07/12 by SM

Элементы платы

Микроконтроллер ATmega4809

Сердцем платформы является 8-битный микроконтроллер семейства megaAVR — ATmega4809 с тактовой частотой до 20 МГц. Контроллер предоставляет 48 КБ Flash-памяти для хранения прошивки, 6 КБ оперативной памяти SRAM и 256 байт энергонезависимой памяти EEPROM для хранения данных.

На плате Arduino Uno Wi-Fi частота контроллера установлена на 16 МГц.

Микроконтроллер ATmega32U4

Микроконтроллер ATmega32U4, с прошивкой USB-UART преобразователя, обеспечивает связь контроллера ATmega4809 с USB-портом компьютера. При подключении к ПК Arduino Uno Wi-Fi определяется как виртуальный COM-порт.

Беспроводной модуль NINA-W102

За беспроводную связь отвечает модуль U-blox NINA-W102 со встроенным чипом ESP32 для обмена данными по воздуху в диапазоне 2,4 ГГц по Wi-Fi и Bluetooth. Регулировка выходной мощности обеспечивает оптимальное соотношение между дальностью связи, скоростью передачи данных и энергопотреблением.

IMU-сенсор

IMU-сенсор на 6 степеней свободы включает в себя акселерометр и компас. Сборка выполнена на чипе LSM6DS3 по технологии (англ. System-in-Package — система в корпусе), где акселерометр и гироскоп лежат методом бутерброда в пластиковом корпусе.

Светодиодная индикация

Имя светодиода Назначение
ON Информационный индикатор питания
RX и TX Мигают при обмене данными между Arduino и ПК
L Пользовательский светодиод на пине микроконтроллера, в отличии от пина на других платформах Arduino. Используйте определение для работы со светодиодом. При задании значения высокого уровня светодиод включается, при низком – выключается.

Регулятор напряжения на 5 вольт

Импульсный понижающий регулятор напряжения MPM3610 обеспечивает питание микроконтроллера ATmega4809 и другой логики платформы при подключении платформы через внешний разъём питания или пин . Диапазон входного напряжения от 7 до 12 вольт. Выходное напряжение 5 вольт с максимальным выходным током 1,2 ампера.

Регулятор напряжения на 3,3 вольта

Линейный понижающий регулятор напряжения NX1117CE33Z обеспечивает питание беспроводного модуля NINA-W102 и IMU-сенсора LSM6DS3. На регулятор поступает напряжение с линии . Выходное напряжение 3,3 вольта с максимальным выходным током 1 ампер.

Распиновка платы

Контакты под номерами от 0 до 13 требуют соединения только с цифровым сигналом, то есть они понимают только два состояния: высокий и низкий уровни сигнала. Также они работают с сигналами ШИМ и на вход, и на выход.

Цифровые пины платы Uno

Пин на плате Адрес в скетче Специальное использование ШИМ
пин 0 RX
пин 1 1 TX
пин 2 2 Вход прерываний
пин 3 3 Вход прерываний ШИМ
пин 4 4
пин 5 5 ШИМ
пин 6 6 ШИМ
пин 7 7
пин 8 8
пин 9 9 ШИМ
пин 10 10 SPI (SS) ШИМ
пин 11 11 SPI (MOSI) ШИМ
пин 12 12 SPI (MISO)
пин 13 13 SPI (SCK)

На выходе подключен встроенный светодиод

Аналоговые пины Arduino Uno

Аналоговые контакты Arduino Uno служат для подключения устройств с непрерывным сигналом. Они являются входами АЦП. В «Ардуино Уно» он имеет 10 разрядов.

Контакт Адрес в скетче Особое значение
Аналоговый A0 A0 или 14
Аналоговый A1 A1 или 15
Аналоговый A2 A2 или 16
Аналоговый A3 A3 или 17
Аналоговый A4 A4 или 18 I2C (SCA)
Аналоговый A5 A5 или 19 I2C (SCL)

На плате имеются дополнительные контакты:

  1. AREF — источник опорного напряжения для АЦП, управляемый функцией analogReference().
  2. RESET, низкий сигнал на котором перезагружает устройство.

Распределение памяти

Как уже говорилось — встроенной памяти чипсет не имеет, а поэтому используется внешняя — от 512 Кбайт до 4 Мбайт. Эта память распределена на следующие разделы:

  • скетчи (память для прошивки);
  • файловая система SPIFFS;
  • OTA-Update (прошивка, переданная «по воздуху»);
  • EEPROM (да-да, её у МК тоже нет, поэтому она имитируется на flash-памяти);
  • конфигурация WiFi.

Файловая система SPIFFS

Во внешней flash-памяти явно есть свои «плюшки». Одна из них — файловая система. Как это ни странно, в неё можно с лёгкостью записать файлы (как на какой-нибудь накопитель). На аппаратном уровне это можно было бы реализовать подключив к МК модуль SD-карт. Однако это решение требует свободных портов (которых иногда может не быть). Поэтому SPIFFS является очень полезным в данном плане.

Для чего? На МК часто заливаются веб-странички, медиа-файлы и прочее. Если HTML-страницу в 20 строк ещё приемлемо хранить в коде, то что делать с большими сайтами? При каждом изменении менять в коде? А с изображениями как? Сериализовать (бывает и такое) и тоже вставлять в код? Вот в таких случаях и спасает файловая система.

Размер файловой системы (от 32 Кбайт до 15 Мбайт) зависит от самого объема flash-памяти и от конфигурации, выставленной в Инстурменты → Flash size. Например, конфигурация предназначена для МК с общим объёмом flash-памяти 4 Мбайт, 2 Мбайт из которых будут выделены под файловую систему.

SPIFFS не работает с папками — она содержит только список файлов. Соответственно, если загрузить в неё папку style, в которой будет файл header.css, то в файловую систему систему запишется файл с именем /style/header.css. Об этом стоит помнить, потому что длина файлового имени не должна превышать 31 символ (читается 32, но символ с кодом 0 отведён под завершение строки). В этот 31 символ, естественно, входят все слэши, точки перед расширением и само расширение. Поэтому придётся воздержаться от многоуровневых структур и длинных имён файлов/папок.

Для загрузки файлов в файловую систему МК потребуется инструмент ESP8266FS, который интегрируется в Arduino IDE. Инструкция по установке:

Энергонезависимая память EEPROM

Уже упоминалось, что сам чипсет не имеет энергонезависимой памяти, поэтому она имитируется через внешнюю flash-память. Из-за этого работа с ней немного отличается от стандартной. Перед считыванием или записью данных нужно инициализировать EEPROM, указав при этом выделяемую под неё память (от 4 до 4096 байт) функцией . Привычная функция записывает данные не на саму энергонезависимую память, а в оперативную. Чтобы внесённые данные записались в память, нужна функция (или же , чтобы заодно очистить данные из оперативной памяти). Метод возвращает байт из памяти по адресу.

Прошивка «по воздуху» OTA-Update

ESP8266 имеет возможность обновления прошивки по сети WiFi. Это удобно, если МК находится в труднодоступном месте. Кроме того, прошивки «по воздуху» чаще всего быстрее, чем по проводу.

Вам потребуется установленный Python.

Потом в скетч нужно добавить файл: . Инициализируем и настраиваем OTA следующими строками:

После этого достаточно в метод добавить строку: .

Прошиваем МК по проводу. В случае успешной загрузки в списке портов появится новый хост с именем «esp8266-xxxxxx», где esp8266 — указанное выше имя хоста, а xxxxxx — локальный IP-адрес МК. Выбираем его.
Теперь МК можно прошивать «по воздуху».

Структура проекта

Файл Назначение
WaterpoolManager.ino Объявление основных переменных и констант. Инициализация. Главный цикл.
HeaterMainLogic.ino Основная логика управления реле котла (по температурам) и вспомогательными реле.
Sensors.ino Считывание данных сенсоров
Settings.ino Настройки устройства, сохранение их в флеш-памяти контроллера
LCD.ino Вывод информации на LCD
ClockTimer.ino Считывание показаний часов RTC, или симуляция часов
Relays.ino Управление включением/выключением реле
ButtonLogic.ino Логика реакции на состояния аппаратных кнопок
ReadButtonStates.ino Считывание состояний аппаратных кнопок
EEPROM_Logging.ino Логгирование данных датчиков в EEPROM
WebServer.ino Встроенный веб-сервер для управления устройством и отображением состояний
WebPages В этой папке хранятся страницы веб-сервера
index.h Основная страница отображения состояния устройства. Идет считывание текущего состояния с помощью вызова ajax. Refresh каждые 5 секунд.
loggraph.h Выводит лог данных датчиков и состояний реле в виде графика. Используется библиотека jqPlot – все построение происходит на стороне клиента. Запрос к контроллеру идет лишь на бинарный файл – копии данных из EEPROM.
logtable.h тоже, но в виде таблицы
settings.h Управление настройками устройства: установка пределов по температурам, потоку воды, периодичности логгирования данных
time.h Установка текущего времени
Библиотеки
EepromLogger.cpp Библиотека записи логов во флеш
EepromLogger.h
crc8.cpp Подсчет 8-битного CRC для библиотеки
crc8.h
TimeSpan.cpp Структура для управления отрезками времени
TimeSpan.h

Распиновка

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

Особую популярность обрел контроллер ESP-01. Исполнение кода программы задается состоянием портов GPIO0, GPIO2 и GPIO15: включением и выключением подачи питания на них. Существует два важных режима работы:

  • Код выполняется из универсального асинхронного приёмопередатчика (UART) с комбинацией GPIO0 = 0, GPIO2 = 1 и GPIO15 = 0. Эти действия выполняются для перепрошивки flash-накопителя;
  • Код выполняется из внешнего ПЗУ с комбинацией GPIO0 = 1, GPIO2 = 1 и GPIO15 = 0 для работы в штатном режиме.

Приводится официальное описание всех контактов:

  • 1 — заземление, а 8 — питание платы. Напряжение необходимо подавать до 3.6 В в отличие от Ардуино, в который подают 5В;
  • 6 — кнопка Reset, необходимая для перезагрузки чипа;
  • 4 — CP_PD — переводит чип в режим энергосбережения;
  • 7 или 0 — RXD0 и TXD0 аппаратные пины для универсального асинхронного приёмопередатчика, необходимые для перепрошивки;
  • 2 — TDX0, к которому подключают светодиод, срабатывающий в случае передачи данных по УАПП или при подключении на низком логическом уровне;
  • 5 — GPI0, позволяющий осуществлять вход и вывод, а также переводить контроллер в режим программирования;
  • 3 — GPIO2 — стандартный порт ввода/вывода.

Основные отличия Ардуино от ESP8266

От не менее популярного Arduino Wifi модуль ESP отличается следующими чертами:

  • Наличием большего объема flash-памяти и отсутствием энергонезависимой памяти;
  • Более быстрым процессором;
  • Наличием Wifi модуля;
  • Потреблением большей силы тока, чем Ардуино

Сборка макетной платы ESP8266

ESP8266 – недорогой SoC-чип со встроенным микроконтроллером и полным стеком протоколов TCP/IP, что означает, что он может напрямую обращаться к вашей Wi-Fi сети.

Поскольку у этого чипа есть свой микроконтроллер, вы можете поместить в него код своего приложения или можете использовать модуль просто как Wi-Fi приемопередатчик, что мы и собираемся сделать в данном проекте. Более эффективно было бы использовать этот модуль и как приемопередатчик, и как контроллер, но в целях обучения мы будем взаимодействовать с модулем, используя Arduino.

Чип ESP8266 поставляется в разных модулях. Мы будем использовать модуль ESP-01. Конечно, вы можете использовать любой другой модуль.

Во-первых, вы должны знать, что модуль работает с напряжением 3,3 В, и напряжение высокого логического уровня от Arduino должно быть таким же, чтобы не повредить наш модуль. Для этого требуется преобразователь уровня напряжения между платой Arduino (которая работает на 5 В) и модулем. Хорошей новостью является то, что в преобразователе будет нуждаться только вывод для передачи на Arduino, поскольку приемный вывод обычно распознает логические сигналы с напряжением 3,3 В от ESP8266.

Одним из простейших способов выполнения этого преобразования является схема от Sparkfun. Вы можете заказать готовый модуль.

Преобразователь уровня 5В → 3,3В

На рисунке ниже показана распиновка нашего модуля на ESP8266:

Распиновка Wi-Fi модуля ESP8266 (вид сверху, не в масштабе)

Вывод Назначение
UTXD Передача данных через UART
URXD Прием данных через UART. Выход, к которому он подключается, должен быть 3,3 В.
CH_PD Выключение: низкий уровень на входе выключает чип, высокий уровень на входе включает его; для нормальной работы модуля необходимо подтянуть его к линии питания.
GPIO0 При загрузке: должен быть высокий уровень, чтобы входить в нормальный режим загрузки; низкий уровень вводит в специальные режимы загрузки.
GPIO2 При загрузке: низкий уровень заставляет загрузчик войти в режим загрузки флеш-памяти; высокий уровень вызывает нормальный режим загрузки.
RST Сброс; активный уровень – низкий.
GND Земля.
VCC Питание/3,3В.

Я использовал LM317, настраиваемый линейный регулятор напряжения с выходным током до 1,5 А, для обеспечения модуля подходящим источником питания 3,3 В.

Примечание: Не используйте вывод 3,3 В от Arduino, так как стабилизатор напряжения 3,3 В на плате Arduino не может обеспечить необходимую для модуля величину тока, особенно при пиковом потреблении энергии во время передачи.

Принципиальная схема макетной платы ESP8266

Я использовал BS170 (вместо BSS138) для преобразователя логических уровней; оба работают хорошо.

Макетная плата ESP8266

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

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации