Espruino:Примеры/Использование ESP8266 через WiFi

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Использование ESP8266 через WiFi[1]

Эта статья – вводное руководство об использовании ESP8266-версии Espruino при помощи WiFi, а не последовательного порта.

Настройка WiFi

Первый шаг – это настроить WiFi таким образом, чтобы соединение было постоянным. То есть WiFi-соединение должно быть стабильным даже после сброса ESP8266, когда код не запущен или когда загружен неисправный код и так далее. Это делается при помощи подключения к точке доступа и последующего сохранения WiFi-настроек. После этого подключаться в коде уже будет не нужно – это будет происходить автоматически.

Итак, настройка WiFi делается в 3 этапа. Возможно, в процессе будет полезно иногда сверяться с описанием библиотеки WiFi.

1. Подключаемся к точке доступа

var wifi = require("Wifi");
wifi.connect("my-ssid", {password:"my-pwd"}, function(err){
  console.log("connected? err=", err, "info=", wifi.getIP());
});
wifi.stopAP();

Спустя несколько секунд вы должны увидеть сообщение «connected? err= null», и ваша Espruino подключится к сети! Если возникла какая-то ошибка, подредактируйте функцию connect().

1 (альтернативный вариант). Создаём точку доступа

В целом, лучше вообще не использовать ESP8266, так как функционал этого микроконтроллера очень сильно ограничен, и вам придётся при каждой новой проблеме заново подключаться к точке доступа. Но это хороший вариант, если вы где-то далеко от цивилизации, где точек доступа попросту нет – вы сами можете создать точку доступа и с её помощью выйти в интернет. Для этого вам понадобится вот такой код:

var wifi = require("Wifi");
wifi.disconnect();
wifi.startAP("my-ssid", {password:"my-password",authMode:"wpa_wpa2"});

Теперь, попробуйте выполнить на телефоне или ноутбуке сканирование WiFi-точек – в результатах сканирования должна появиться созданная только что точка доступа. Узнать IP-адрес ESP8266 можно при помощи функции wifi.getAPIP() – это должен быть «192.168.4.1».

2. Подключаемся через Web IDE

Запустите Web IDE Espruino, зайдите в настройки (иконка с шестерёнкой справа вверху), выберите Communications, найдите пункт Connect over TCP Address (этого пункта нет в версии Web IDE на espruino.com, но есть в версии из онлайн-магазина Chrome) и задайте там IP-адрес и порт своей ESP8266. Например, «192.168.1.34:23» или, если используете режим точки доступа, то «192.168.4.1:23». Обратите внимание на порт «23» – это порт, который прослушивает Espruino.

Закройте настройки, кликните на кнопку подключения (жёлтая кнопка слева вверху) и выберите введённые в предыдущем абзаце TCP-данные. Это подключит вас к интерпретатору ESP8266. Чтобы проверить, к правильной ли точке вы подключились, воспользуйтесь wifi.getStatus(). Чтобы сбросить состояние интерпретатора, воспользуйтесь reset().

Если вы не хотите использовать IDE, то можете подключиться с помощью обычной программы-терминала. Просто используйте имя хоста или IP-адрес ESP8266 и порт «23».

3. DNS-имя и сохранение настроек

Вы, возможно, захотите присвоить DNS-имя своему ESP8266, чтобы не возиться с IP-адресом. Это делается следующим образом:

wifi.setHostname("my-esp");

Наконец, нам нужно сохранить настройки, чтобы они не удалялись после аппаратных сбросов и выключения платы:

wifi.save();

Теперь вы можете выключить и включить ESP8266, а затем снова подключиться через IDE (возможно, в первый раз нужно будет отключиться вручную – IDE не сразу замечает обрыв соединения). Помните, что сохранение WiFi-настроек означает, что задавать их в программном коде теперь не нужно – разве что вам не нужно выполнить какие-то специальные действия, которые невозможны путём обычного сохранения WiFi-настроек.

Решение проблем

Как избавиться от сохранённого JS-кода

Иногда случается так, что с помощью save() были сохранены команды, которые в момент запуска платы мешают WiFi-коммуникации, или плата в целом как-то странно себя ведёт. Исправить это можно с помощью функции reset(), которая сбросит состояние интерпретатора, а затем функции save(), которая сохранит это обнулённое состояние. После этого вы сможете воспользоваться WiFi-командами для подключения к точке доступа или каких-то других манипуляций с WiFi. Затем воспользуйтесь wifi.save(), чтобы сохранить заданные WiFi-настройки и включите/выключите (или перезагрузите) свой ESP8266 – например, с помощью require("ESP8266").reboot(). Теперь проверьте, всё ли нормально во время загрузки. Затем загрузите JS-код своего приложения (но без команд, которые потенциально могут вступить в конфликт с WiFi-настройками) и напечатайте save(), чтобы сохранить его на flash-память. Теперь снова перезагрузитесь – ESP8266 должен подключиться к WiFi и запустить ваш код.

ESP8266 непрерывно сбрасывает саму себя – как это прекратить?

К WiFi это не относится, но... Иногда вы загружаете на Espruino такой JS-код, из-за которого плата постоянно крашится или чудит каким-то другим образом, не давая получить доступ к интерпретатору. Решение – перезаписать область, куда сохраняется JS-код: запишите файл «blank.bin» в сектор 0x7a000 (или сверьтесь со схемой flash-памяти и найдите там последний 4-килобайтный сектор области для сохранения JS-кода).

Если вам нужно обнулить область для хранения WiFi-данных, запишите файл «blank.bin» в сектор 0x7b000.

Как ждать WiFi-соединения до запуска сервисов

Вы можете в любой момент запустить прослушивающий сокет – ещё даже до создания WiFi-соединения. Прослушивающий сокет находится с серверной стороны, поэтому ему всё равно, есть ли WiFi-соединение или нет, поменялся ли IP-адрес или нет и так далее.

Если вам надо сделать исходящий вызов, то рекомендуем не просто ждать соединения, а делать этот вызов постоянно, пока ваши попытки не увенчаются успехом. Это более надёжный подход, позволяющий справиться не только с потерей соединения с точкой WiFi-доступа, но и с другими ошибками.

См.также

Внешние ссылки