Espruino:Примеры/Использование ESP8266 через WiFi: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{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" | Эта статья – вводное руководство об использовании 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-доступ]]а, но и с другими ошибками. | |||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 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-доступа, но и с другими ошибками.
См.также
Внешние ссылки