Esp8266 розетка: WiFi-розетка своими руками / Хабр

Модуль одноканального реле «ESP8266 умная розетка» для WiFi-контроллера ESP-01/01S ESP8266

Одноканальный релейный модуль «ESP8266 умная розетка» для WiFi-контроллеров беспроводной связи ESP-01/01S

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

Internet of Things, IoT).

Модули на чипе ESP8266 завоевали заслуженную популярность среди разработчиков собственных электронных проектов благодаря низкой ценовой категории и наличием базового функционала. ESP-01/01S самодостаточен, лёгок в настройке и не нуждается в дополнительной обвязке. Он способен выполнять все основные операции приёмо-передачи данных по технологии WiFi.

С помощью данного модуля, можно по сети Wi-Fi управлять любым устройством, работающим от сетей переменного или постоянного тока. В качестве принимающего устройства используется контроллер ESP8266-01S (ESP-01S). Модуль собран на зеленом стеклотекстолите с габаритами 37 мм на 25 мм, большую часть платы занимает реле SRD-5DVC-SL-C, такое же используется в обычных модулях реле на один и два канала. Рядом с реле небольшая электрическая обвязка, необходимая для нормального переключения этого реле.

Одноканальный релейный модуль «ESP8266 умная розетка» не является функционально законченным изделием и служит дополняющим расширением к WiFi-контроллеру ESP-01/01S на чипе ESP8266.

В паре с контроллером, позволяет дистанционно управлять коммутацией цепей с постоянным или переменным напряжением и невысокими токами нагрузки. Контроллер ESP-01/01S приобретается отдельно и программируется пользователем самостоятельно. Под его установку, на плате модуля расширения распаян двухрядный разъём жёлтого цвета.

Модуль собран на зеленом стеклотекстолите габаритами 37см на 25см. Большую часть платы занимает электромеханическое реле SRD-5DVC-SL-C, имеющее рядом три винтовые клеммы коммутации внешней цепи (NO-COM-NC). Похожие реле часто встречаются в популярных и недорогих Ардуино-совместимых релейных модулях с одним, двумя и более каналами. Схема модуля построена на транзисторном ключе с гальванической развязкой, разделяющей рабочие напряжение и ток реле от управляющего сигнала. В плату интегрирован понижающий регулятор AMS1117, снабжающий ESP8266 необходимым 3.3-вольтовым напряжением. Номинальное питание модуля составляет 5В.

Характеристики модуля

  • Модель: V4. 0
  • Рабочее напряжение: 5 В
  • Рабочий ток: до 450 мА
  • Регулятор напряжения: AMS1117-3.3
  • Светодиодный индикатор срабатывания
  • Тип реле: SRD-05VDC-SL-C, электромеханическое
  • Количество каналов: 1
  • Коммутируемое напряжение: до 250 В переменное, до 30 В постоянное
  • Ток нагрузки: до 5А переменное напряжение, до 7А постоянное напряжение
  • Пиковый кратковременный ток: 10 А
  • Модель совместимого контроллера ESP8266: ESP-01/01S
  • Интерфейс: GPIO
  • Размеры: 37 мм х 25 мм

Назначение выводов модуля

— группа из 3 винтовых клемм — подключение нагрузки;
— группа из 2 винтовых клемм — питание модуля, входы GND и +5В;
— 8-пинов разъём (2х4) — место установки контроллера ESP-01/01S

 

 

Коммутация внешних цепей

Встроенное реле оснащено блоком винтовых клемм-терминалов, предназначенных для коммутации внешних схем, и состоит из трёх линий подключения. Реле позволяет замыкать/размыкать как одну независимую цепь переменного или постоянного напряжения, так и переключаться между двумя зависимыми цепями с одной общей линией питания (плюсовой или минусовой стороной). В большинстве случаев, клеммы реле обозначены следующим образом: нормально открытый контакт (NO), общий контакт (

COM), нормально закрытый контакт (NC). Однако, нередки случаи, когда встречаются варианты с аналогичной графической символикой, схожей с принятым обозначением реле в принципиальных схемах. Понятие «нормально» означает состояние контакта в исходном положении реле (неактивный режим) по отношению к общему центральному выводу (COM). Момент срабатывания реле (переход в активный режим) приводит к изменению контактов NO и NC в противоположное состояние. Иными словами, если внешняя цепь, подключенная к контактам COM+NO, замыкается при срабатывании реле, то цепь COM+NC — в активном режиме размыкается.

Документация

  1. Принципиальная схема релейного модуля

Самодельная умная wi-fi розетка

В этой статье я расскажу вам, как собрал умную wi-fi розетку.

Шаг 1: Материалы

Для сборки вам понадобятся:

  • ESP8266 (пойдет любая версия)
  • модуль реле 5В
  • AMS1117 (линейный регулятор с малым падением напряжения)
  • 1К резистор
  • сдвоенная розетка
  • настенный корпус
  • подрозетник
  • 5В зарядное устройство от телефона
  • кабель питания

Для программирования микроконтроллера ESP8266 вам понадобятся:

  • адаптер FTDI Usb 3,3 В
  • повода-коннекторы

Шаг 2: Предупреждение!

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

Я вас предупредил.

Шаг 3: Делаем блок питания

Показать еще 3 изображения

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

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

Шаг 4: Проводка для высокого напряжения

Для питания я взял силовой кабель от компьютера.
Я собираюсь фазу подключить вместо нейтраля.
Я решил убрать одну из пластин, разделяющих два гнезда розетки. Это позволит оставить одну розетку всегда включенной, а другую можно будет включать и выключать с помощью реле.

Шаг 5: Подключаем микропроцессор и реле

Схема проводки достаточно проста, поэтому я решил обойтись без печатной платы, а просто спаять все вокруг ESP8266.
Модуль вай-фай я установил ESP12, но подойдет любой линейки ESP.
Кнопочные выключатели и адаптер FTDI-Usb будут нужны для программирования микроконтроллера. Для этого на модуле сделаны штыревые коннекторы:

  • Ground
  • RX
  • TX
  • GPIO0 (замыкается на землю при включении питания, чтобы перевести контроллер в режим программирования)
  • Reset (перезапуск, опционально)

На фото видно, что я спаял всю проводку вокруг модуля реле, вместо того, чтобы установить реле на макетную плату. Линейный регулятор AMS1117 и микропроцессор ESP8266 я установил вокруг модуля реле. Провода достаточно жесткие, чтобы удержать модуль вай-фай на месте. Напряжение 3В от линейного регулятора выводится на средний штырь И на теплоотвод, так удобнее фиксировать модуль вай-фая на месте.

Шаг 6: Программирование

Что касается программного обеспечения, выбор у вас обширен. Простейшая программа, что я нашел – Blynk. Скачайте бесплатное приложение для Android или iPhone, зарегистрируйтесь и получите аутентификатор.

В программе Arduino IDE откройте Менеджер библиотек (Скетч> Включить библиотеку> Управление библиотеками) чтобы установить библиотеку Blynk. Файл> Образцы> Blynk> Платы и шилды> ESP8266_StandAlone

Пропишите в скетче ваш аутентификатор, SSID (имя) вашего домашнего вай-фая и пароль.
Заземлите GPIO0 (можно временно припаять провод на землю, или с помощью переключателя), и включите питание, чтобы перевести контроллер в режим программирования. Как только загрузка будет завершена, можно отсоединить USB-шнур.

В приложение Blynk настройте кнопку и на этом ваша работа над умной розеткой завершена!

Оглавление

  • Шаг 1: Материалы
  • Шаг 2: Предупреждение!
  • Шаг 3: Делаем блок питания
  • Шаг 4: Проводка для высокого напряжения
  • Шаг 5: Подключаем микропроцессор и реле
  • Шаг 6: Программирование

Как использовать ESP8266/ESP32 в качестве TCP-сервера и клиента с сокетами

ESP8266 и ESP32 — популярные платы для разработки WiFi. Эти платы микроконтроллеров идеально подходят для создания Интернета вещей (IoT). Мы рассмотрели, как подключить ESP8266 и ESP32 (или любой порт MicroPython) к сетевому соединению для использования в качестве станции WiFi здесь. Мы использовали сетевой модуль MicroPython.

Этот сетевой модуль предоставляет драйвер для создания сетевого интерфейса. Интерфейс зависит от сетевой среды (WiFi или Ethernet) и аппаратного обеспечения порта для этой среды. Используя сетевой интерфейс, такой как WLAN (WiFi) или Ethernet, ESP8266/ESP32 или любой порт MicroPython могут подключаться к Интернету. Этот же модуль также полезен для управления определенными конфигурациями маршрутизатора.

Сокет MicroPython или модуль usocket требуется для доступа к различным сетевым службам. Примеры сетевых служб включают World Wide Web (WWW), поиск доменных имен (DNS), электронную почту, файловый сервер, службы времени, VoIP, сеть беспроводных датчиков, службы каталогов, совместное использование файлов, файловый сервер, обмен мгновенными сообщениями, управление сетью. протоколы и другие.

После подключения ESP8266/ESP32 к Интернету через Wi-Fi или Ethernet (с помощью сетевого модуля) их можно использовать для нескольких приложений на основе IoT. Для IoT ESP8266 и ESP32 подключаются к Интернету/сетевым службам через низкоуровневый доступ, который обеспечивается базовой поддержкой сокетов из базовых операционных систем/прошивок.

Например, MicroPython предоставляет модули socket и usocket для сетевого программирования поддерживаемых портов и плат на уровне сокетов. Модуль сокета является повторной реализацией подмножества модуля CPython с тем же именем. Модуль usocket — это расширенная реализация встроенного модуля сокетов MicroPython.

С помощью сокетов ESP8266/ESP32 можно настроить как сервер или клиент TCP/IP. Платы также могут быть настроены как UDP-сервер или клиент. ESP8266/ESP32 или любой порт MicroPython можно использовать для любой сетевой роли в качестве веб-сервера или клиента.

В этой статье мы рассмотрим основы протокола управления передачей/Интернет-протокола (TCP/IP) и сетей UDP. Мы также обсудим, как ESP8266/ESP32 можно настроить в качестве веб-сервера или клиента в глобальной сети с помощью модуля сокетов. Наконец, мы протестируем простое IoT-приложение ESP8266/ESP32 в качестве веб-сервера.

Что такое сокет Python?
Сокеты используются для низкоуровневого сетевого программирования. В программировании сокет — это конечная точка связи между двумя программами, работающими в сети. Они облегчают двунаправленную связь между двумя сетевыми устройствами. Типичным применением сокетов является клиент-серверное приложение, в котором одно из сетевых устройств является сервером, а другое — клиентом.

Сокеты обеспечивают межпроцессное взаимодействие (IPC), что означает, что сокеты (или конечные точки) взаимодействуют внутри процесса — между процессами на одной или нескольких машинах. Сокеты домена Unix взаимодействуют между процессами на одном компьютере. Интернет-сокеты, сокеты Berkley или сокеты BSD взаимодействуют между процессами на разных машинах. Сеть, в которой два устройства взаимодействуют на уровне сокетов, может быть локальной сетью (LAN), глобальной сетью (WAN) или Интернетом.

Модуль сокетов CPython обеспечивает интерфейс к API сокетов Беркли, который напрямую сопоставляется с системными вызовами на уровне ОС/прошивки. Модуль сокетов MicroPython — это повторно реализованное подмножество того же модуля.

Стоит отметить, что в сети термин «сокет» относится к сетевому порту устройства и IP-адресу. Порт — это конечная точка, указывающая тип сетевой службы или конкретного процесса. Это 16-битный идентификатор для комбинированного сетевого протокола и сетевой службы. Сетевой протокол может быть TCP/IP или UDP.

В этой таблице перечислены некоторые наиболее часто используемые номера портов для различных сетевых служб TCP/IP и UDP.

Номера портов для различных сетевых служб TCP/IP и UDP.

Адрес Интернет-протокола (IP) — это числовой идентификатор устройства, подключенного к компьютерной сети, которая использует IP для связи. Комбинация IP-адреса и номера порта (т. е. сокета) является уникальным идентификатором:

  • Исходного/целевого устройства в компьютерной сети
  • Сетевой протокол (протокол IP), используемый для связи
  • Сетевая служба/процесс, участвующий в обмене данными.

Сокет = IP-адрес + номер сетевого порта

Сокеты MicroPython относятся к сокетам программирования, а не к сетевым сокетам (IP-адрес и номер порта). Однако некоторые методы API сокетов используют сетевой сокет (IP-адрес и номер порта) в качестве параметров, таких как метод connect(). Параметр принимается как отдельное имя хоста и номер порта.

Низкоуровневый и высокоуровневый доступ
Стандартный Python обеспечивает два типа доступа к компьютерным сетям: низкоуровневый и высокоуровневый.

  • Низкоуровневый доступ обеспечивается сокетами. Сокеты используют системные вызовы базовой операционной системы/прошивки для связи с устройством на другом конце сети. Сокеты могут реализовывать протоколы, ориентированные на установление соединения, и протоколы без установления соединения.
  • Высокоуровневый доступ обеспечивается путем реализации интернет-протоколов прикладного уровня, таких как HTTP, FTP, DNS и т. д.

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

MicroPython легко настраивает поддерживаемые порты низкоуровневого доступа в качестве серверов или клиентов. Программирование сокетов даже позволяет серверу взаимодействовать с несколькими клиентами одновременно.

Сравнение сетевых протоколов TCP/IP и UDP
Двумя широко используемыми сетевыми протоколами являются TCP и UDP. Оба протокола являются частью пакета TCP/IP, набора многоуровневых протоколов, используемых для связи через Интернет. Этот пакет основан на модели клиент-сервер, в которой клиенты отправляют запросы на сервер. Сервер может обслуживать запросы нескольких клиентов.

Существует четыре уровня TCP/IP:

  • Прикладной уровень — реализованы протоколов, таких как HTTP, HTTPS и FTP.
  • Транспортный уровень — данные передаются в виде дейтаграмм с использованием TCP.
  • Сетевой уровень — соединение с Интернетом устанавливается через IP, где исходное и целевое устройства идентифицируются по IP-адресам.
  • Канальный уровень — данные передаются через Интернет в виде битов на целевое устройство.

Разбивка сетевой архитектуры TCP/IP.

TCP и UDP — это два протокола транспортного уровня. Сокеты могут использовать TCP и UDP для настройки клиент-сервер. TCP является более надежным протоколом, поскольку он интенсивно проверяет ошибки. По этой причине он используется несколькими протоколами прикладного уровня, такими как HTTP, HTTPS, FTP, SMTP и т.  д. 

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

Большинство устройств IoT полагаются на протокол TCP для передачи данных между сервером TCP и клиентами TCP, в основном там, где протоколы HTTP, HTTPS или SMTP работают на уровне приложений. Платы IoT часто настраиваются как TCP-сервер или TCP-клиент.

Семейства адресов
Исходное и целевое устройства идентифицируются по IP-адресам на сетевом уровне. Однако существуют разные типы IP-адресов. Каждый тип распознается своим семейством адресов.

Семейства адресов и их идентификаторы в программировании сокетов.

Определение сокета
В сетевом программировании сокет определяется методом конструктора socket.socket(), который принимает два параметра. Одним из параметров является семейство адресов, определяемое идентификаторами, указанными в таблице выше. Второй параметр — это транспортный протокол, TCP или UDP.

Сеть TCP указана в socket.SOCK_STREAM. Сеть UDP указана в socket.SOCK_DGRAM. Типичное определение сокета в Python: 

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

Если используется семейство адресов AF_INET, адрес IPv4 указывается с именем хоста и номером порта (т. е. сетевым сокетом) . Имя хоста может быть строкой, представляющей веб-сайт/местоположение в Интернете, или числовым IP-адресом веб-сайта/устройства. Номер порта — это целое число, указывающее сетевой сервис. Например, номер порта указывает на HTTP, 443 – на HTTPS и т. д. 

TCP-сервер или клиент?
При разработке приложения IoT один из первых вопросов заключается в том, следует ли настроить порт/плату IoT MicroPython в качестве TCP-сервера или клиента. В модели клиент-сервер клиент отправляет запрос серверу, а сервер обслуживает этот запрос. Сервер не может инициировать связь.

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

Устройство IoT должно быть настроено как клиент TCP, если операции управления зависят от обратной связи с сервера IoT или облачной платформы. То же самое верно, если устройство предназначено для отображения или управления данными с удаленного сервера/облака IoT.

Например, плату следует настроить как TCP-сервер, если устройство управляет ретранслятором с порта MicroPython/платы IoT через веб-страницу. Напротив, его следует настроить как TCP-клиент, если время отображения порта MicroPython/платы IoT поступает с сервера времени.

Модуль сокетов
Модуль сокетов MicroPython обеспечивает доступ к Интернету или интерфейсу сокетов Berkeley/BSD. Модуль сокетов прошивки MicroPython напрямую реализует файловый (потоковый) интерфейс. В этом отличие от модуля сокета CPython, и поэтому объекты сокета не нужно преобразовывать в файловые объекты с помощью функции makefile().

Модуль сокета импортируется в сценарий MicroPython с помощью этого оператора:

import socket

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

class socket.socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)

Метод конструктора принимает три параметра:

  • Семейство адресов определяет тип используемого IP-адреса. на сетевом уровне.
  • Тип сокета определяет выбор сети TCP или UDP.
  • Номер протокола определяет тип используемых протоколов TCP или UDP.

Номер протокола является необязательным, и его следует избегать. Обычно он не указывается портами MicroPython и автоматически выбирается типом сокета.

Следующий метод модуля сокетов настраивает порт MicroPython в качестве TCP-сервера…

socket.bind(address) : привязывает сокет к IP-адресу. Сокет не должен быть уже привязан.

socket.listen() : разрешает TCP-серверу принимать соединения. В этот метод можно передать параметр невыполненной работы, который указывает количество непринятых подключений перед отказом в новых подключениях. Если параметр не указан, сервер выбирает любое разумное значение.

socket.accept() : позволяет серверу принять новое соединение. Сокет должен быть уже привязан к IP-адресу и прослушивать подключения. Этот метод возвращает пару значений: соединение и адрес. Conn — это новый объект сокета, который используется для передачи и получения данных по новому соединению. Адрес — это IP-адрес устройства на другом конце сети, с которым передаются данные.

Следующий метод модуля сокетов настраивает порт MicroPython в качестве TCP-клиента…

socket.connect(address) : подключает сокет клиента к сокету удаленного сервера. IP-адрес сокета удаленного сервера передается в качестве параметра.

Следующие методы модуля сокетов управляют передачей данных на TCP-сервере и клиенте.

socket.send(bytes) : используется для отправки данных в другой сокет и должен быть подключен к удаленному сокету. Метод возвращает количество байтов, отправленных в удаленный сокет. И серверные, и клиентские сокеты используют этот метод.

socket.sendto(bytes, address) : используется для отправки данных в удаленный сокет, который определяется IP-адресом, переданным в качестве параметра. Сокет не должен быть уже подключен к удаленному сокету. Этот метод более полезен на TCP-сервере, который может взаимодействовать с несколькими клиентами.

socket.sendall(bytes) : используется для отправки всех данных в удаленный сокет путем передачи их последовательными порциями. Сокет должен быть подключен к удаленному сокету. Поведение этого метода для неблокирующих сокетов не определено.

socket.write(buf) : отправляет буфер байтов в удаленный сокет. Сокет должен быть подключен к удаленному сокету. Этот метод записывает все данные в удаленный сокет в соответствии с политикой «без коротких записей». Это не представляет проблемы для блокирующих сокетов, в которые данные всегда успешно отправляются. Для неблокирующих сокетов этот метод возвращает количество отправленных байтов, которое может быть меньше фактического размера буфера. Известно, сколько байт успешно отправлено в неблокирующий сокет.

socket.recv(bufsize) : получает данные из удаленного сокета. Он возвращает байтовый объект, представляющий полученные данные. Максимальный размер полученных данных определяется размером объекта буфера, который передается в качестве параметра.

socket.recvfrom(bufsize) : получает данные из удаленного сокета. Сокет должен быть подключен к удаленному сокету. Метод возвращает байтовый объект, представляющий полученные данные и IP-адрес удаленного сокета. Этот метод более полезен на TCP-сервере, который может подключаться к нескольким клиентам.

socket.read([size]) : чтение из удаленного сокета до количества байтов, указанного в качестве параметра размера. Если параметр размера не указан, он считывает все данные из удаленного сокета до тех пор, пока не получит EOF (т. е. пока удаленный сокет не будет закрыт). Этот метод следует политике «без коротких чтений», которая позволяет ему считывать все запрошенные данные. Для неблокирующих сокетов этот метод по-прежнему не может прочитать все данные.

socket.readinto(buf[ nbytes]) : считывает данные из удаленного сокета в буферный объект. Если указан параметр bytes, он считывает в буфер только указанное количество байтов. Этот метод возвращает количество байтов, прочитанных и сохраненных в объекте буфера, и следует политике «без коротких чтений», такой как метод socket. read().

socket.readline() : читает строку, заканчивающуюся символом новой строки, из удаленного сокета. Он возвращает строку, прочитанную из удаленного сокета.

socket.close() : закрывает сокет и освобождает удерживаемые им ресурсы. Как только сокет закрыт, любые будущие операции завершатся сбоем. Когда сокет закрыт, удаленный сокет может получить индикацию EOF, если это поддерживается протоколом. Но сокеты автоматически закрываются при сборке мусора, и для повышения эффективности их нужно закрывать явно.

Следующие методы модуля сокета модифицируют или изменяют поведение сокета… 

socket.setsockopt(level, optname, value) : Обратите внимание, что сокеты по умолчанию имеют стандартное поведение. Поведение сокета можно изменить, изменив различные параметры сокета. Этот метод устанавливает значение данной опции сокета. Параметры сокета, которые можно установить с помощью этого метода, предоставляются в виде констант, начинающихся с SO_ или SOL_ в модуле сокета. Значение, которое может быть передано параметрам сокета, является целым числом или байтовым объектом.

socket.setblocking(flag) : переводит сокет в блокирующий или неблокирующий режим. Если для флага установлено значение True, сокет устанавливается в режим блокировки. Если для флага установлено значение False, сокет устанавливается в неблокирующий режим. Этот метод служит сокращением для метода socket.settimeout(). Режим сокета по умолчанию — блокирующий. Блокирующий сокет не возвращается в программу, пока не завершится запрошенное событие. Неблокирующие сокеты немедленно отвечают программе, показывая, завершено запрошенное действие или нет. Блокирующий сокет возвращает номер ошибки, если запрошенное событие/действие выполняется.

socket.settimeout(value) : устанавливает время ожидания для блокирующих сокетов. Время ожидания указывается как неотрицательное значение с плавающей запятой. Если для тайм-аута установлено значение «0», сокет переводится в неблокирующий режим. Если для тайм-аута установлено значение none, сокет переводится в режим блокировки. Этот метод доступен не для всех портов/плат MicroPython.

socket.makefile(mode=’rb’) : возвращает файловый объект, связанный с сокетом. Метод makefile() MicroPython не поддерживает параметры ошибок, кодировки и новой строки, как метод makefile() CPython. Он также не поддерживает буферизацию потоков. Если параметр буфера установлен, он игнорируется и считается «0» (т. е. небуферизованным). Единственный параметр, который он принимает, — это «режим». Поддерживаются только двоичные режимы rb, wb и rwb. Если файловый объект, возвращаемый этим методом, закрывается, исходный сокет также закрывается.

Функции, предоставляемые модулем сокета, следующие:

socket.getaddrinfo() : преобразует сетевой сокет (т. е. хост/порт) в последовательность из 5 кортежей, которые можно использовать для создания сокета. Формат 5-кортежа (семейство, тип, прототип, каноническое имя, sockaddr). Этот метод часто используется для разрешения текстовых имен хостов. В следующем примере выводится разрешенный IP-адрес Engineersgarage.com.

сокет импорта
sockaddr = socket.getaddrinfo(‘www.engineersgarage.com’, 80)[0][-1]
print(sockaddr)

При выполнении приведенного выше кода после разрешения имени хоста возвращается следующий IP-адрес… представление в соответствии с указанным семейством адресов. Вот правильный пример этой функции:

socket.inet_ntop(socket.AF_INET, b”\x7f\0\0\1″)

Результат вызова этой функции: ‘127.0.0.1’

socket.inet_pton(af, txt_addr) : преобразует текстовый сетевой адрес данного семейства адресов в его двоичное представление. Вот допустимый пример этой функции:

socket.inet_pton(socket.AF_INET, «127.0.0.1»)

Результат вызова этой функции: b’\x7f\0\0\1′

Модуль сокетов MicroPython не поддерживает исключения socket. error.

Модуль usocket
Модуль usocket от MicroPython аналогичен модулю сокета, который может быть встроен в порт/плату MicroPython или установлен из micropython-lib. Если скрипт для модуля сокета не найден, используйте скрипт для модуля usocket. Они оба работают.

Настройка ESP8266/ESP32 в качестве TCP-клиента с использованием сокетов
Следующий код MicroPython настраивает ESP8266/ESP32 в качестве TCP-клиента, считывающего исходный код HTML с веб-страницы. Веб-страница должна иметь протокол HTTP, а не протокол HTTPS.

import network

station = network.WLAN(network.STA_IF)
if station.isconnected() == True:
    print(«Уже подключено») )
station.connect(«SSID», «ПАРОЛЬ»)
while station.isconnected() == False:
    pass
print(«Соединение успешно»)

7 print. ifstation ())

def http_get(url):
    import socket
    _, _, host, path = url.split(‘/’, 3)

addrinfo, get socket 80)[0][-1]
    s = socket.socket()
    s.connect(addr)
    s.send(bytes(‘GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n’ % (путь, хост), ‘utf8 ‘))
В то время как True:
Данные = S.Recv (200)
Если данные:
Печать (Str (Data,’ UTF8 ‘), END = ”)
ELSE:
            break
    s.close()

http_get(‘http://micropython.org/ks/test.html’)

Вы должны заменить SSID и ПАРОЛЬ в строке № 7 на SSID и сетевой ключ вашего собственного WiFi-соединения.

Результат вышеописанного сценария MicroPython показан ниже.

Чтение веб-страниц, зашифрованных с помощью SSL
ESP8266, настроенный выше, не может читать содержимое HTML веб-страниц, зашифрованных с помощью SSL. MicroPython мало поддерживает протокол SSL. Однако можно читать содержимое веб-страниц, зашифрованных с помощью SSL, с помощью стандартного Python на микрокомпьютере.

Попробуйте выполнить следующий скрипт Python на Raspberry Pi или на своем компьютере.

def http_get (url):
Импорт сокет
Импорт SSL
_, _, host, path = url.split (‘/’, 3)
Real_host = host. http://», «»).replace(«https://», «»).split(«/»)[0].split(«:»)[0]
    s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    request = bytes(‘GET /%s HTTP/1.1\r\nHost: %s\r\n\r\n’ % (путь, хост), ‘utf8’ )
Контекст = ssl.sslcontext (ssl.protocol_tlsv1_2)

s = context. wrap_socket (s, server_hostname = real_host)
S.Connect ((Real_host, 443))
7.sconnect ((Real_host, 443))
7.Sendall (real_host, 443)))
7. Конкурс = S.Recv (5000) .decode ()
Печать (конкурс)
В то время как контекст! = B »:
Конкурс = S.Recv (5000) .decode ()
Печать (5000) .decode ()
. конкурс)
    s.close()     

http_get(‘https://www.engineersgarage.com/ Different-types-biometric-sensors-morphological-behavioral/’)

Приведенный выше скрипт Python считывает исходный код HTML веб-страницы, зашифрованной с помощью SSL, из www.engineersgarage.com. Обратите внимание, что URL-адрес веб-сайта и engineeringgarage.com используют протоколы HTTPS. Сценарий Python запускает TCP-клиент и возвращает HTML-содержимое указанного URL-адреса, как показано на изображениях ниже.

Настройка ESP8266/ESP32 в качестве TCP-сервера с использованием сокетов
Следующий сценарий MicroPython настраивает ESP8266 в качестве TCP-сервера. Сервер ESP8266 использует IP-адрес подключенного маршрутизатора. Когда клиент запрашивает сервер, например, компьютер, подключенный к тому же WiFi-соединению, он возвращает HTML-страницу.

импорт сети
импорт машины

станция = network.WLAN(network.STA_IF)
if station.isconnected() == True:
0019
station.active(True)
station.connect(«SSID», «PASSWORD»)
while station.isconnected() == False:
    пройти печать )
print(station.ifconfig())

html = “””

    Сервер ESP8266 >
    <тело>

Добро пожаловать на сервер ESP8266




”” ”

Импорт. 0.0.0.0′, 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

7 ‘900 прослушивание’, адрес)

в то время как True:
    cl, адрес = s.accept()
Print (» Client подключен к ‘, addr)
CL_FILE = cl.makefile (‘ rwb ‘, 0)
В то время как True:
Line = cl_file.readline ()
, а не линия, а не линия, а не линия, а не линия, а не линия или строка == b’\r\n’:
           break
    response = html
    cl.send(‘HTTP/1.0 200 OK\r\nContent-type: text/html\r\n r\n’)
    cl.send(ответ)
    cl.close()     

Вы должны заменить SSID и ПАРОЛЬ в строке № 8 приведенного выше кода на SSID и сетевой ключ вашего собственного WiFi-соединения. Чтобы запустить сервер, загрузите и запустите указанный выше скрипт MicroPython на ESP8266 с помощью uPyCraft IDE или Thonny IDE.

На приведенном ниже снимке экрана показан сервер ESP8266, работающий и отвечающий клиенту.

Чтобы сделать запрос к серверу ESP8266, введите IP-адрес, возвращаемый методом station.ifconfig(), в адресной строке браузера. Сервер ESP8266 вернет HTML-страницу в ответ на запрос браузера вашего компьютера.

На снимке экрана ниже показан пример веб-страницы, возвращаемой сервером ESP8266.

 


Рубрики: Технические статьи
С тегами: ESP32, esp8266, ip, MicroPython, sockets, tcp, wifi
 


Страница не найдена | Visuino — визуальная разработка для Arduino

Похоже, страницы, которую вы ищете, здесь больше нет. Попробуйте использовать окно поиска или карту сайта ниже.

Страницы

Верх

Категория Архивы

  • Начинающие (RSS) (44)
  • Промежуточный (RSS) (65)

Топ

Сообщения в блоге

  • NRF24L01 Беспроводное управление серводвигателем с помощью джойстика (0)
  • Простой ЖК-индикатор уровня заряда батареи 20×4 I2C (0)
  • Arduino NeoPixel LED Ring Fire Simulation (0)
  • 7 Как управлять 90 a 360 Непрерывный серводвигатель с использованием Arduino (0)
  • Шаговый двигатель Arduino 28byj-48 Управление скоростью и направлением (0)
  • Управление ЖК-дисплеем ST7735 Яркость подсветки с использованием ШИМ с Arduino (0)
  • Распознавание цвета Arduino с помощью датчика цвета TCS34725 и Neopixels (0)
  • Включение и выключение ЖК-дисплея с помощью кнопки с помощью Arduino (0)
  • Управление серводвигателем с помощью ИК-пульта дистанционного управления с помощью Arduino (0)
  • Сканер I2C — как найти Адреса I2C на Arduino (0)
  • Получить положение серводвигателя с SD-карты (0)
  • Как использовать водонепроницаемый датчик температуры DS18B20 с Arduino (0)
  • Переключатель хлопков с помощью датчика звука и Arduino (0)
  • Метеостанция | Как использовать датчик температуры, влажности и давления BME280 (0)
  • Развертка частоты генератора импульсов Arduino (0)
  • Как сохранить температуру и время данных датчика на SD-карту с помощью Arduino (0)
  • MOTOR MOSFET Управление скоростью с помощью Arduino (0)
  • Как отправить текст на большое расстояние с помощью HC-12 (0)
  • Мощность сигнала Wi-Fi ESP32 TTGO (0)
  • HC-12 Метеостанция дальнего действия и датчики DHT (0)
  • Создание ГРАНИЦ ПО GPS с помощью Arduino (0)
  • Arduino – как читать Текстовый файл SD-карты Построчно (0)
  • Простой счетчик шагов с использованием Arduino (0)
  • Очки SteamPunk — Простое руководство «Сделай сам», часть 2 (0)
  • Подключение до 64 модулей I2C — Модуль мультиплексора I2C TCA9548A (0)
  • ЖК-меню Arduino — Простое руководство (0)
  • Аналоговый измеритель скорости или объема с Arduino (0)
  • Управление яркостью лазера с помощью потенциометра (0)
  • Arduino Яркость лазера Широтно-импульсная модуляция PWM (0)
  • Arduino Как подключить несколько серводвигателей — PCA9685 Tutorial (0)
  • Arduino Подключение нескольких устройств I2C (0)
  • Измеритель УФ-индекса с использованием УЛЬТРАФИОЛЕТОВОГО датчика ML8511 Arduino (0)
  • Монитор растений Arduino с емкостным датчиком почвы (0)
  • GPS-часы Arduino с использованием местного времени Модуль NEO-6M (0)
  • Цифровой датчик температуры и влажности DHT21 с Arduino (0)
  • Как использовать датчик влажности и температуры DHT22 с Arduino (0)
  • Вращающийся вентилятор с серводвигателем и регулятором скорости (0)
  • Как прокручивать текст на I2C OLED-ДИСПЛЕЙ 0,91″ 128X32 (0)
  • Измерение расстояния и близости с помощью датчика жестов APDS9960 (0)
  • ПОЛУЧИТЬ ЦЕНУ BITCOIN LIVE TTGO ESP32 (0)
  • Управление направлением и движением рук DC MOTOR Использование Arduino (0)
  • Радарная лидарная система VL53L0X Laser Time-of-Flight (0)
  • Как использовать датчик влажности и температуры DHT12 I2C с Arduino (0)
  • Средство от комаров Arduino (0)
  • Как контролировать трафик Освещение с использованием Arduino (0)
  • Как использовать датчик жестов APDS9960 с Arduino (0)
  • Управление двигателем постоянного тока с помощью энкодера Модуль оптического датчика FC-03 (0)
  • Как построить систему полива растений с помощью Arduino (0)
  • Датчик дождя с помощью Arduino и Датчик капель дождя (0)
  • Как собрать монитор растений с помощью Arduino (0)
  • Отображение времени на светодиодном дисплее TM1637 с использованием RTC DS1307 (0)
  • Растровая анимация на SSD1331 OLED-дисплее (SPI) с помощью Visuino (0)
  • Счетчик со светодиодным дисплеем TM1637 и датчиком обхода препятствий (0)
  • VL53L0X Time-of-Flight + OLED-дисплей (0)
  • Arduino Отображение температуры на светодиодном дисплее TM1637 (0)
  • Плавный пуск двигателя постоянного тока, скорость и направление с помощью потенциометра, OLED-дисплея и кнопок (0)
  • Управление Скорость и направление двигателя постоянного тока с помощью потенциометра, OLED-дисплея и кнопок (0)
  • Контрольный светодиод мигает с помощью потенциометра и OLED-дисплея (0)
  • Счетчик Arduino с использованием светодиодного дисплея TM1637 (0)
  • Контрольный светодиод мигает импульсами с помощью потенциометра (0)
  • Arduino управляет скоростью и направлением двигателя постоянного тока с помощью потенциометра и кнопок (0)
  • Меню OLED-дисплея Arduino с возможностью выбора (0)
  • Как отправлять данные из M5Stack StickC в Delphi (0)
  • Rotate Sand CLOCK Every Минуты с использованием серводвигателя (0)
  • ESP8266 OLED — получение времени и даты из Интернета (0)
  • Управление светодиодами Arduino с помощью аналогового джойстика (0)
  • Узнайте, когда кто-то вошел в комнату, используя радарный датчик Xyc-wb-dc ( 0)
  • Arduino управляет скоростью и направлением двигателя постоянного тока с помощью потенциометра (0)
  • Как использовать ИК-датчик и модуль зуммера — учебник по Visuino (0)
  • Новогодний фейерверк Arduino (0)
  • Огни рождественской елки Arduino (0)
  • Arduino LCD Christmas Tree (0)
  • Создание компонента Visuino – Часть 6 (0)
  • Создание компонента Visuino – Часть 5 (0)
  • Создание компонента Visuino – Часть 4 (0)
  • Создание компонента Visuino – Часть 3 (0)
  • Создание компонента Visuino — часть 2 (0)
  • Создание компонента Visuino — часть 1 (0)
  • Как использовать пользовательский код Visuino — часть 9 (0)
  • Как использовать пользовательский код Visuino — часть 8 (0)
  • Как использовать использование пользовательского кода Visuino — часть 7 (0)
  • использование пользовательского кода Visuino — часть 6 (0)
  • использование пользовательского кода Visuino — часть 5 (0)
  • использование пользовательского кода Visuino — часть 4 (0)
  • Как использовать пользовательский код Visuino — Часть 3 (0)
  • Как использовать пользовательский код Visuino — часть 2 (0)
  • Как использовать пользовательский код Visuino — часть 1 (0)
  • Как управлять устройством Arduino и взаимодействовать с ним с помощью Delphi (0)
  • Как подключить и использовать GY-30 Датчик освещенности Bh2750 (GY30 / GY302) (0)
  • Как использовать шаговый двигатель в качестве поворотного энкодера и OLED-дисплея для шагов (0)
  • Управление яркостью светодиода с помощью потенциометра и OLED-дисплея (0)
  • Метеостанция с использованием BMP280- DHT11 – Температура, влажность и давление (0)
  • Получение времени и даты из Интернета (0)
  • Ультразвуковой датчик расстояния для светодиодного кольца Arduino (0)
  • Экран Nextion — быстрый старт (0)
  • Узнайте, когда кто-то вошел в комнату (0)
  • Управление яркостью светодиода с помощью Потенциометр (0)
  • M5StickC Стильные часы с меню и регулировкой яркости (0)
  • CONTROL LED MATRIX MAX7219 WITH ARDUINO (0)
  • Полицейская сирена Arduino со светодиодными полицейскими огнями (0)
  • Светодиодное кольцо Arduino Neopixel Ws2812 (0)
  • Простая самодельная метеостанция с DHT11 и OLED-дисплеем (0)
  • M5StickC Как отображать температуру, влажность и давление (0)
  • RemoteXY в Visuino (0)
  • Датчик вибрации SW-520D Переключатель наклона с металлическим шариком (0)
  • Резистор с датчиком силы (FSR) Arduino (0)
  • Самодельный робот Otto, идущий (0)
  • Как исправить проблемы с M5STACK StickC — прыгающий курсор мыши (0)
  • Как использовать кнопку в качестве входа для управления вещами Как светодиод (0)
  • Обнаружение вибрации с помощью модуля датчика пьезоэлектрического удара (0)
  • Как сделать классные часы (0)
  • Как отображать время на M5StickC ESP32 с помощью Visuino (0)
  • Как отображать текст на M5StickC ESP32 с помощью Visuino (0)
  • Метеостанция с дисплеем Nextion, DS1307 RTC и DHT11 (0)
  • Как запрограммировать ESP32 M5Stack StickC (0)
  • Управление Ручной вентилятор с емкостным сенсорным датчиком (0)
  • Создание работающего светодиода с помощью Arduino ( 0)
  • Как определить вибрации с помощью переключателя SHAKE SWITCH (0)
  • Как сделать игру в кости с помощью OLED-дисплея (0)
  • Как управлять шаговым двигателем с помощью модуля дистанционного управления (0)
  • Как контролировать скорость Шаговый двигатель NEMA 17 с высоким крутящим моментом (0)
  • Шаговый двигатель с ИК-модулем препятствий (0)
  • Как использовать датчик давления и температуры BMP280 (0)
  • Управление интеллектуальным роботом с модулем дистанционного управления (0)
  • Как использовать Ультразвуковой дальномер и Visuino (0)
  • Получение точного времени из Интернета (0)
  • Как использовать ультразвуковой дальномер с сохранением настроек в EEPROM (0)
  • ПОКАЗАТЬ НОВОСТИ ПРЯМОГО ВРЕМЕНИ из Интернета с помощью NODEMCU (0)
  • Отслеживание перемещений в Интернете с помощью Matomo Web Analytics (0)
  • Подключите Arduino UNO к серводвигателю (0)
  • GPS-позиционирование NEO-6M, подключенное к NodeMCU и OLED-дисплею (0)
  • Самодельный алкогольный алкотестер с датчиком MQ-3 (0)
  • Visuino Ramps для светодиодов Широтно-импульсная модуляция (ШИМ) (0)
  • Как легко установить время с помощью Visuino-Arduino (0)
  • Управление мощным шаговым двигателем Nema17 (0)
  • Изменение яркости светодиода с широтно-импульсной модуляцией (0)
  • Как использовать индуктивный датчик приближения (0)
  • Питание Arduino с батареей 1,5 В (0)
  • XYC-WB-DC Микроволновый радарный датчик движения (0)
  • Как пользоваться ЖК-дисплеем ST7735 (0)
  • Отображение времени процессора Arduino на OLED-дисплее (0)
  • Сервопривод Угол мотора с использованием компонента последовательности Visuino (0)
  • Велосипедный GPS-спидометр Arduino (0)
  • Простой способ управления серводвигателем с помощью Arduino (0)
  • Сервопривод поворота с контроллером PS2 (0)
  • Прохладный автоматический вентилятор Arduino (0)
  • Как управлять сервоприводом с помощью джойстика ( 0)
  • ГЕНЕРАТОР ИМПУЛЬСОВ (0)
  • Мигание светодиода с помощью ESP8266 и Visuino (0)

Вверх

Этот веб-сайт использует файлы cookie для улучшения вашего опыта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *