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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= <syntaxhighlight...»)
 
Нет описания правки
 
(не показаны 4 промежуточные версии 2 участников)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


=<ref>[ www.espruino.com - ]</ref>=
=Использование ESP8266 через WiFi<ref>[https://www.espruino.com/ESP8266_WifiUsage www.espruino.com - Using the ESP8266 with Wifi]</ref>=


<syntaxhighlight lang="javascript" enclose="div">
Эта статья – вводное руководство об использовании ESP8266-версии [[Espruino]] при помощи [[WiFi]], а не последовательного порта.
 
== Настройка WiFi ==
 
Первый шаг – это настроить WiFi таким образом, чтобы соединение было постоянным. То есть WiFi-соединение должно быть стабильным даже после сброса [[ESP8266]], когда код не запущен или когда загружен неисправный код и так далее. Это делается при помощи подключения к точке доступа и последующего сохранения WiFi-настроек. После этого подключаться в коде уже будет не нужно – это будет происходить автоматически.
 
Итак, настройка WiFi делается в 3 этапа. Возможно, в процессе будет полезно иногда сверяться с описанием [http://wikihandbk.com/wiki/Espruino:Справочник_по_API/Библиотека_WiFi библиотеки WiFi].
 
=== 1. Подключаемся к точке доступа ===
 
<syntaxhighlight lang="javascript">
var wifi = require("Wifi");
wifi.connect("my-ssid", {password:"my-pwd"}, function(err){
  console.log("connected? err=", err, "info=", wifi.getIP());
});
wifi.stopAP();
</syntaxhighlight>
 
Спустя несколько секунд вы должны увидеть сообщение ''«connected? err= null»'', и ваша [[Espruino]] подключится к сети! Если возникла какая-то ошибка, подредактируйте функцию connect().
 
=== 1 (альтернативный вариант). Создаём точку доступа ===
 
В целом, лучше вообще не использовать [[ESP8266]], так как функционал этого [[микроконтроллер]]а очень сильно ограничен, и вам придётся при каждой новой проблеме заново подключаться к точке доступа. Но это хороший вариант, если вы где-то далеко от цивилизации, где точек доступа попросту нет – вы сами можете создать точку доступа и с её помощью выйти в интернет. Для этого вам понадобится вот такой код:
 
<syntaxhighlight lang="javascript">
var wifi = require("Wifi");
wifi.disconnect();
wifi.startAP("my-ssid", {password:"my-password",authMode:"wpa_wpa2"});
</syntaxhighlight>
 
Теперь, попробуйте выполнить на телефоне или ноутбуке сканирование 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-адрес]]ом. Это делается следующим образом:
 
<syntaxhighlight lang="javascript">
wifi.setHostname("my-esp");
</syntaxhighlight>
 
Наконец, нам нужно сохранить настройки, чтобы они не удалялись после аппаратных сбросов и выключения платы:
 
<syntaxhighlight lang="javascript">
wifi.save();
</syntaxhighlight>
 
Теперь вы можете выключить и включить [[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-доступ]]а, но и с другими ошибками.


=См.также=
=См.также=


{{ads}}
 


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

См.также

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