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-доступа, но и с другими ошибками.
См.также
Внешние ссылки