Esp8266 не отвечает на запрос от приложения для Android, созданного с помощью MIT App Inventor

Я надеюсь, что размещаю этот вопрос в правильном разделе. Я делаю проект "Умный дом" для выпускного семестра в колледже. Я использую микроконтроллер Atmega328p вместе с ESP8266 (Esp 01). Atmega328p управляет всеми датчиками и исполнительными механизмами и отправляет данные на Esp01 по последовательной связи.

Я создал веб-сервер на Esp01, к которому я планирую получить доступ, создав приложение с помощью MIT App Inventor. Мой запрос на получение имеет формат "http://192.168.43.42/4" где цифра в конце-это данные, которые я хочу отправить на сервер, а ответ, который я получаю от сервера, имеет формат "12&0&34,8", где " & " используется для разделения разных значений.

Моя проблема в том , что когда я получаю доступ к серверу из Chrome на своем ноутбуке , я получаю желаемый ответ, но когда я получаю доступ к нему с помощью приложения, я получаю сообщение об ошибке "Ошибка 1101 :Не удается найти указанный URL-адрес". Esp01 подключается к точке доступа с моего телефона, и я проверил IP, назначенный Esp01, чтобы убедиться, что мой запрос на получение верен.

Код для Esp01 в Arduino IDE находится здесь : https://gist.github.com/TheMagicSmoke/467d6227d670697464038056e22f302d

Ниже приведены блоки для приложения, созданные в App Inventor:

URL-адрес запроса GET при вводе из Chrome в ноутбуке сначала возвращает пустую страницу, но при обновлении Chrome я получаю желаемый ответ, о котором говорил ранее. И в приложении я использовал таймер , который запрашивает сервер с одним и тем же запросом GET каждые 2 секунды. Но когда я открываю приложение, ошибка продолжает появляться. Пожалуйста, предложите мне решение, я погуглил это без какого-либо успеха.

, 👍1

Обсуждение

Является ли MIT AppInventor чем-то, что работает локально на устройстве или компьютере в вашей сети, или чем-то, что работает где-то на веб-сайте?, @Majenko

Я отредактировал название, так как оно казалось вводящим в заблуждение. Я имел в виду, что я получаю доступ к серверу с помощью приложения для Android, созданного с помощью MIT App Inventor, который является веб-сайтом., @user151016

Мне трудно найти какую-либо конкретную информацию, но похоже, что "приложение" на вашем телефоне может быть просто интерфейсом для веб - серверов MIT, и код на самом деле работает там, а не на вашем телефоне, что означает, что код не может получить доступ к тому, что находится внутри вашей сети, - только к тем вещам, которые находятся в Интернете., @Majenko

Вы неправильно поняли. Сервер является локальным сервером, который был создан на esp8266. Приложение на моем телефоне отправляет запрос GET на этот сервер. И мой телефон, и Esp8266 находятся в одной сети Wi-Fi. Это не имеет никакого отношения к серверам в Массачусетском технологическом институте., @user151016

Нет, *ты* неправильно понял. Как я уже сказал, я не уверен, но я *думаю*, что AppInventor работает так: 1. вы разрабатываете свое приложение. 2. интерфейс отображается на вашем телефоне. 3. Взаимодействия отправляются с вашего телефона в MIT. 4. MIT выполняет код. 5. MIT пытается подключиться к вашему ESP8266. Ваш ESP8266 не подключен к Интернету, а MIT не находится в вашей локальной сети, поэтому MIT не может подключиться к нему., @Majenko

Я бы предложил использовать какую-нибудь стороннюю систему связи, такую как MQTT (если AppInventor поддерживает ее), или переключиться на реальный язык программирования, который работает непосредственно на вашем телефоне., @Majenko

Подключен ли телефон к Wi-Fi в той же сети, что и esp-01? (@Majenko, я помог здесь, на SE, с проектом с App Inventor, и не было никаких проблем с доступом к локальному esp-01), @Juraj

@Juraj "Esp01 подключается к точке доступа с моего телефона", @Majenko

вы пытались получить доступ к странице из браузера на телефоне?, @Juraj

@Majenko Приложения, созданные с помощью MIT App Inventor, запускают код локально на мобильном устройстве, а не через серверы MIT. Я в этом уверен. Спасибо, что помогли мне. Я нашел решение и опубликую его ниже в качестве ответа., @user151016

@Juraj спасибо тебе за помощь. Я нашел решение и опубликую его ниже в качестве ответа., @user151016

Можешь отправить сообщение. файл aia? Много раз заранее. Том, @tomavka


1 ответ


Лучший ответ:

1

Я нашел решение этой проблемы. Код, который я написал в среде IDE Arduino для Esp8266, не подходил для обработки запроса GET. Он принимал данные только как простой веб-сервер, а не как HTTP-сервер. Я публикую измененный код ниже .

https://gist.github.com/TheMagicSmoke/adaae1e4d92f258c88184c8690e68f08

,

поэтому я не смотрел на ваш код (первая версия). Я ожидал, что вы использовали пример WiFiWebServer, а не скетч, который ожидает данные через 10 миллисекунд после подключения, иначе это не удастся, @Juraj