WiFi ESP8266 (ESP8266WiFi)
Функции библиотеки WiFi ESP8266 очень схожи с функциями библиотеки для обычного WiFi шилда.
- WiFi . mode ( m ) : выбрать режим WIFI_AP (точка доступа), WIFI_STA (клиент), или WIFI_AP_STA (оба режима одновременно).
- WiFi . softAP ( ssid ) создает открытую точку доступа
- WiFi . softAP ( ssid , password ) создает точку доступа с WPA2-PSK шифрованием, пароль должен быть не менее 8 символов
- WiFi . macAddress ( mac ) позволяет получить MAC адрес в режиме клиента
- WiFi . softAPmacAddress ( mac ) позволяет получить MAC адрес в режиме точки доступа
- WiFi . localIP ( ) позволяет получить IP адрес в режиме клиента
- WiFi . softAPIP ( ) позволяет получить IP адрес в режиме точки доступа
- WiFi . RSSI ( ) пока не реализована
- WiFi . printDiag ( Serial ) ; выводит диагностическую информацию
Класс WiFiUDP поддерживает прием и передачу multicast пакетов в режиме клиента. Для передачи multicast пакета используйте вместо udp . beginPacket ( addr , port ) функцию udp . beginPacketMulticast ( addr , port , WiFi . localIP ( ) ) . Когда вы ожидаете multicast пакеты, используйте вместо udp . begin ( port ) функцию udp . beginMulticast ( WiFi . localIP ( ) , multicast_ip_addr , port ) . Вы можете использовать udp . destinationIP ( ) для определения того, был ли пакет отправлен на multicast адрес или предназначался именно вам. Multicast функции не поддерживаются в режиме точки доступа.
WiFiServer , WiFiClient , и WiFiUDP работаю точно так же, как и с библиотекой обычного WiFi шилда. Четыре примера идет в комплекте с этой библиотекой.
Тикер
Библиотека Ticker может быть использована для выполнения периодически повторяющихся событий через определенное время. Два примера включено в поставку.
В настоящее время не рекомендуется блокировать операции ввода-вывода (сеть, последовательный порт, файловые операции) в callback функциях тикера. Вместо блокирования устанавливайте флаг в callback функциях и проверяйте этот флаг в основном цикле.
EEPROM
Эта библиотека немного отличается от стандартной Arduino EEPROM. Необходимо вызвать функцию EEPROM . begin ( size ) каждый раз перед началом чтения или записи, размер (указывается в байтах) соответствует размеру данных, которые вы намереваетесь использовать в EEPROM. Размер данных должен быть в диапазоне от 4 до 4096 байт.
Функция EEPROM . write не производит запись данных во флеш память немедленно, вы должны использовать функцию EEPROM . commit ( ) каждый раз, когда вы хотите сохранить данные в память. Функция EEPROM . end ( ) тоже производит запись данных, а также освобождает оперативную память от данных, запись которых произведена. Библиотека EEPROM использует один сектор во флеш памяти, начиная с адреса 0x7b000 для хранения данных. В поставку включено три примера работы с EEPROM.
I2C (Библиотека Wire)
Реализован только режим ведущего, частота ориентировочно до 450 кГц. Перед использованием шины I2C, нужно выбрать пины SDA и SCL путем вызова функции Wire . pins ( int sda , int scl ) , например Wire . pins ( 0 , 2 ) для модуля ESP-01. Для других модулей пины по умолчанию 4(SDA) и 5(SCL).
Библиотека SPI поддерживает весь Arduino SPI API, включая транзакции, в том числе фазу синхронизации (CPHA). Clock polarity (CPOL) пока не поддерживается (SPI_MODE2 и SPI_MODE3 не работают).
ESP8266 API
Поддержка функций, специфичных для ESP8266 (режим глубокого сна и сторожевой таймер), реализована в объекте ESP . Функция ESP . deepSleep ( microseconds , mode ) переводит модуль в режим глубокого сна. Параметр mode может принимать значения: WAKE_DEFAULT , WAKE_RFCAL , WAKE_NO_RFCAL , WAKE_RF_DISABLED . GPIO16 должен быть соединен с RESET для выхода из режима глубокого сна.
Функции ESP . wdtEnable ( ) , ESP . wdtDisable ( ) , и ESP . wdtFeed ( ) управляют сторожевым таймером.
ESP . reset ( ) перезагружает модуль
ESP . getFreeHeap ( ) возвращает размер свободной памяти
ESP . getFreeHeap ( ) возвращает размер свободной памяти
ESP . getChipId ( ) возвращает ESP8266 chip IDE, int 32bit
ESP . getFlashChipId ( ) возвращает flash chip ID, int 32bit
ESP . getFlashChipSize ( ) возвращает размер флеш памяти в байтах, так, как его определяет SDK (может быть меньше реального размера).
ESP . getFlashChipSpeed ( void ) возвращает частоту флеш памяти, в Гц.
ESP . getCycleCount ( ) возвращает количество циклов CPU с момента старта, unsigned 32-bit. Может быть полезна для точного тайминга очень коротких операций
Библиотека OneWire
Библиотека OneWire была адаптирована для ESP8266 (внесены изменения в OneWire.h) Если у вас установлена библиотека OneWire в папку Arduino/libraries, то будет использоваться именно она, а не из комплекта поставки.
mDNS библиотека ESP8266mDNS
Библиотека позволяет реализовать в вашей программе ответ на мультикастовые DNS запросы для локальной зоны, например “esp8266.local”. В настоящее время поддерживается только одна зона. Позволяет обращаться к WEB серверу ESP8266 по имени, а не только по IP адресу. Дополнительную информацию вы можете найти в прилагаемом примере и в файле readme данной библиотеки.
Подключение модуля ESP8266
В тестовой конфигурации использовался модуль ESP-12-F QIO L4, но, в принципе, дистрибутив может работать на любом модуле семейства ESP8266 (с достаточным объёмом памяти). Рассмотрим подробно его подключение.
Модуль ESP8266 может подключаться к компьютеру двумя способами: при помощи USB-UART адаптера или при помощи платы Arduino качестве этого адаптера. В тестовой конфигурации использовалось подключение при помощи Arduino Uno. Именно этот способ мы и рассмотрим (как отлично себя зарекомендовавший).
Обратите внимание. Arduino Uno работает от напряжения 5 В, а модуль ESP8266 — от 3.3 В, но в тестовой конфигурации их соединение работало отлично. Если вы опасаетесь за работоспособность своего модуля ESP8266 при таком подключении, то вам лучше воспользоваться схемой работы с USB-UART адаптером на 3.3 В (с соответствующим источником питания).
Установка драйвера CH340
Этот драйвер необходим для загрузки скетчей во многие китайские платы контроллеров, такие как Arduino Nano, MEGA, NodeMCU, Wemos D1 mini. Так что он в любом случае вам не помешает. Его можно скачать под вашу операционную систему здесь wemos.cc/en/latest/ch340_driver.html
Запускаем файл установщика и клацаем кнопку INSTALL. Драйвер установлен и теперь все платы контроллеров с прошивальщиком CH340 при подключении к USB входу компьютера автоматически должны получать свой номер COM порта.
Если будут сообщения с ругательствами, клацните кнопку UNINSTALL
Удаленное включение ПК при помощи ESP8266
Всем привет! Давненько я не писал статейки. Сегодня я хочу затронуть животрепесчушуую, тьфу, тему. Как-то за 40 километров от города приспичило мне поработать на своем домашнем ПК. Делов-то, TeamViewer и вся любовь. Да, это хорошо, но Хто ПК то включит. Короче слава богу дома была родня и я позвонив попросил включить комп. А вот что делать если нет никого дома, а гандурас чешется достучаться до ПК? Правильно, сделать включение удаленно. Тут в принципе есть несколько решений. Самый простой, это управление включением ПК по средством Wake-On-LAN, но блин у меня материнка сто летней давности и тратить 3,5 тыра вечнодеревянных на новую как-то не хочется. Так что этот вариант отпадает.
Вариант намбер ту.
Да, да. Эта малышка может замутить из Ethernet виртуальный COM порт. Мега продвинутая FTDI или CP2102. Но и этот вариант не подходит. Для создания виртуального порта нужно на ПК устанавливать спецпрограмму, драйвер и только под форточную ось. Короче не пойдет)) У меня походный ноут работает на Ubuntu.
Вариант намбер сри.
Я думаю расписывать это чудо не надо. Но и тут есть жирный минус. Абонентская плата минимум 3 сотни вечнодеревянных. А если мне не нужно будет пол года подключаться? Не, лажа.
Думал я думал и надумал. Есть у меня вот такая штука.
Кто не вкурсе, я расскажу. Это отладочная платка с WIFI модулем на базе микроконтроллера ESP8266 под управлением NodeMCU. Это такая штука, которую можно программировать на языке lua. И самое ценное, то что для нее написана большая библиотека с поддержкой работы в сети. Поэтому мы будем поднимать TCP сервер и писать TCP клиент. Сервером будет как раз наша платка и она при получении от клиента команды будет включать ПК. А клиент будет прогой под ПК и пихать серверу команду.
Начнем наверное со схемы, дабы знать на каких ногах что будет висеть.
Дык, описание. Модуль при получении команды дергает базу транзистора, а тот. А тот что?
А как сама кнопка включения ПК работает-то?
Я пытался это выяснить гуля и яндекся, а находил лишь заумные ответы типа: «
Когда нажимают кнопку, то команду обрабатывает BIOS и разрешает БП подать напругу на материнку.
» В общем все в этом духе, а когда задавал прямой вопрос «
Как на физическом уровне работает кнопка включения ПК?
«, мне говорили что я идиот, так как она просто замыкает контакты.
Твою мать, логично. И не поспоришь.
Короче я забил на весь ентернеть и полез в системник с тестером. Что я выяснил. Кнопка работает следующим образом. Она замыкает контакты))) А именно два пина на гребенке на материнке с подписью SW PWR. Причем один пин железно прибит к корпусу, а именно на нем всегда GND, а на втором висит 3,3в. Данное напряжение подтянуто через резистор. То есть когда нажимается кнопка, то пин с питанием прижимается к корпусу и комп понимает что нужно включаться. Вывод, дабы заставить включиться ПК, нужно перевести ножку с 1 в 0. Вот для этого и прикручен на схеме транзистор. Да, можно было бы и напрямую от модуля ногу прикрутить и держать ее в 1, а при поступлении команды переводить в 0. Но есть одно большое НО. Представим себе ситуацию, наша железяка подключена к ПК и пихает 3,3в на ножку включения. Вроде все хорошо. Но тут случилось напасть, дома брат, сестра, мама, папа ну или бабушка на худой конец решили включить с кнопки. Чуете чем запахло? Ага, горелым. Мы модулем пихаем 3,3в, а кнопкой прижимают к корпусу. Так вот чтоб развязать этот недуг я и поставил транзистор. Пока команда на включение ПК не пришла, база транзистора жестко прижата к корпусу. Тот закрыт, а коллектор висит в воздухе. Можно обнажиматься на кнопку сколько угодно, ничего не будет, так как транзистор закрыт. А вот когда придет команда и модуль вжарит по базе единицей и транзистор откроется, то тоже ничего страшного не будет, так как он прижмет ножку включения на материнке к корпусу. И даже при выполнении команды кто-то нажмет на кнопку, замыкания не будет. Оба давят на корпус))).
Тэкс, с теорией закончили, топаем делать плату.
Железо готово, пора писать программу. Для железяки нам понадобиться ПО из статью про wifi термодатчик. Топаем туда и вникаем в суть происходящего. А именно ставим все ПО, качаем прошивку для NodeMCU, заливаем в модуль и возвращаемся сюда.
Если все готово, то пишем код.
Далее заливаем в модуль и все готово. Да, да в коде сть две лишних команды на включение и выключение света. Эти команды я вставил для того чтобы можно было расширять функционал модуля. Например им можно будет чем-то управлять по сети. Далее в конце команд я закоментировал болванку для создания новых команд. Так как клиент будет принимать команды введенные вручную, то система становиться резиновой. Выполняемых команд можно напихать столько, сколько позволит память модуля.
Отлично, поехали кодить под ПК. С учетом того что я решил писать клиента под форточки и пингвина, то буду использовать не Visual Studio, а Qt Creator. Ее можно скачать с официального сайта бесплатно. Но для бесплатной версии есть ограничения. Проги не продавать, раздавая прикладывать исходники и она немного порезана по функционалу, но на нашу задачу это не повлияет. Выкладывать код С++ здесь я не буду, а лишь покажу вид программы. Все исходники, программы и описания будут в конце статьи для скачивания.
Чтобы послать команду, заполняем все поля и жмем кнопочку «Отправить».
Если сервер не ответил, то появится ответ «Пустой ответ!»
Если до сервера достучались, но команда не верная, то появится ответ «Фигня!»
Если до сервера достучались и команда выполнена, то появится ответ «Сделано!»
А теперь ссылочки на исходники и схемы с корпусом.
Ну как-то так. Проект для lua я выкладывать не буду, просо скопируйте код из статьи и все. Программу под форточки я сделал с установщиком, так как мне лень расписывать какие файлы куда пихать. Так что просто качаем архив и устанавливаем на ПК. Для Ubuntu все сложнее. Я так и не смог разобраться как создать подобие инсталятора винды в линукс (
если кто расскажет как, буду признателен.
). Поэтому я в архиве приложил файл с инструкцией что куда скопировать для работы проги.
Вроде все))
Будут вопросы, пишите в коментах.
Алексейbird 10.03.19 16:43
Идея хорошая, хоть и не новая. Только обрати внимание, что включить можно только комп, который «смотрит» в глобальную сеть, или хотя бы есть свой маршрутизатор, который имеет белый IP и его можно настроить на проброс портов. В других случаях, а это большинство как раз так и выходит так в сеть, этот способ невозможен. Или искать девайсину, которая сама подключается к удалённому серверу и ждёт команды от него. А пользователь, где-нибудь далеко, также подключается к этому серверу и даёт команду на включение своего компа.
Алексей 11.03.19 06:27
Я думал об этом. Для этого есть серверы типа no-ip.com. Но тогда нужен включеный комп, а это порти всю картину. Либо 150р в месяц и статика обеспечена.
Обзор USB адаптера (программатора) для ESP-01 на CH340G
Сегодня я расскажу про USB адаптер для ESP-01 на чипе CH340G. И поделюсь своим опытом, как можно переделать данный адаптере в программатор для esp-01.
Описание адаптера для ESP-01.
Адаптер представляет из себя плату чёрного цвета, на которой установлены: микросхема CH340G; разъем с шагом 2,5 мм для установки модуля ESP-01; стабилизатор LM62063; USB разъем для подключения к компьютеру.
Приобрел я на AliExpress USB адаптер для программирования esp-01. Из названия понятно, что это просто адаптер, а не программатор. В интернете достаточно много примеров переделки USB адаптера в программатор, что я и сделал, припаяв вот такую гребенку.
Чтобы адаптер переходил в режим программирования необходимо GPIO0 замыкать на GND. А во втором положении перемычки, чтобы не замыкала данные контакты.
Это решение достаточно удобное. После прошивки микроконтроллера мы можем проверить какую информацию он вводит в монитор порта. Достаточно только поменять положение перемычки.
Для работы адаптера на микросхеме CH340G необходимо установить дополнительный драйвер в операционной системе Windows. Драйвер можно скачать внизу статьи, в разделе материалы для скачивания. В операционной системе Linux всё работает без установки дополнительных драйверов.
Для проверки работоспособности программатора можно загрузить скетч мониторинга WiFi сетей.
Данный скетч есть в стандартных примерах Arduino IDE в разделе ESP8266WiFi, точнее он ставится вместе с установкой поддержки семейства ESP8266.
Как настроить Arduino IDE для работы с ESP8266 смотрите тут.
Для прошивки микроконтроллера esp-01 устанавливаем джампер так, чтобы он замыкал GPIO0 на GND. После прошивки переставляем джампер, что позволяет вывести информацию в монитор порта и мы увидим список доступных WiFi сетей.
Можно резюмировать, что данный метод переделки из USB адаптера в программатор работает. Но на этом история не заканчивается. Недавно нашел на AliExpress уже готовый программатор с переключателем на плате. Так выглядит данный программатор.
Он тоже сделан на микросхеме ch340g, и его принцип работы ничем не отличается от переделанного адаптера. А самое обидное то, что этот программатор стоит всего на 50-60 руб дороже, чем адаптер. Оставлю вам ссылку на программатор, чтобы вы не тратили лишнее время на переделку адаптера.
Надеюсь, что моя статья кому-нибудь помогла. Пишите своё мнение про адаптер, программатор и общее впечатление про ESP-01.
Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.
Подключение NodeMCU
Подключаем плату NodeMCU к компьютеру с помощью USB кабеля:
- cначала необходимо установить драйвер CP2102, затем открываем Arduino IDE,
- заходим в раздел «Файл» -> «Настройки» и найдем строчку «дополнительные ссылки для менеджера плат» и вставляем туда следующую ссылку http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json,
- заходим в раздел «инструменты» -> «плата» -> «менеджер плат», где выбираем «esp8266» и скачиваем последнюю версию,
- заходим в раздел «инструменты» -> «плата» и находим Node MCU,
- необходимо в том же разделе зайти в раздел «порт» и выбрать тот, в который подключена плата,
- установить в разделе инструменты: Upload speed (115200 bouad).