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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 15: Строка 15:
=== 1. Подключаемся к точке доступа ===
=== 1. Подключаемся к точке доступа ===


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
var wifi = require("Wifi");
var wifi = require("Wifi");
wifi.connect("my-ssid", {password:"my-pwd"}, function(err){
wifi.connect("my-ssid", {password:"my-pwd"}, function(err){
Строка 29: Строка 29:
В целом, лучше вообще не использовать [[ESP8266]], так как функционал этого [[микроконтроллер]]а очень сильно ограничен, и вам придётся при каждой новой проблеме заново подключаться к точке доступа. Но это хороший вариант, если вы где-то далеко от цивилизации, где точек доступа попросту нет – вы сами можете создать точку доступа и с её помощью выйти в интернет. Для этого вам понадобится вот такой код:
В целом, лучше вообще не использовать [[ESP8266]], так как функционал этого [[микроконтроллер]]а очень сильно ограничен, и вам придётся при каждой новой проблеме заново подключаться к точке доступа. Но это хороший вариант, если вы где-то далеко от цивилизации, где точек доступа попросту нет – вы сами можете создать точку доступа и с её помощью выйти в интернет. Для этого вам понадобится вот такой код:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
var wifi = require("Wifi");
var wifi = require("Wifi");
wifi.disconnect();
wifi.disconnect();
Строка 49: Строка 49:
Вы, возможно, захотите присвоить DNS-имя своему [[ESP8266]], чтобы не возиться с [[IP-адрес]]ом. Это делается следующим образом:
Вы, возможно, захотите присвоить DNS-имя своему [[ESP8266]], чтобы не возиться с [[IP-адрес]]ом. Это делается следующим образом:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
wifi.setHostname("my-esp");
wifi.setHostname("my-esp");
</syntaxhighlight>
</syntaxhighlight>
Строка 55: Строка 55:
Наконец, нам нужно сохранить настройки, чтобы они не удалялись после аппаратных сбросов и выключения платы:
Наконец, нам нужно сохранить настройки, чтобы они не удалялись после аппаратных сбросов и выключения платы:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
wifi.save();
wifi.save();
</syntaxhighlight>
</syntaxhighlight>
Строка 81: Строка 81:
=См.также=
=См.также=


{{ads}}
 


=Внешние ссылки=
=Внешние ссылки=
Строка 87: Строка 87:
<references />
<references />


{{Навигационная таблица/Espruino}}
{{Навигационная таблица/Портал/Espruino}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 19:55, 23 мая 2023

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


Использование 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-доступа, но и с другими ошибками.

См.также

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