Найти тему
Паяльник и код

Исходник программы для Android “Сканирование и поиск устройств ESP32, ESP8266 в сети WiFi”

Оглавление

В статье ESP8266 асинхронный веб-сервер описан скелет программы для ESP устройств, где в коде есть такая строка

server.on("/name", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", "LED_1");
});

По команде “name” к нашему устройству получаем имя устройства. И если устройство отвечает на запрос, получаем ip адрес. Написал приложение для телефона в Android Studio на Kotlin

https://disk.yandex.ru/d/oKqNYComQgjpwA - apk файл для установки на устройство

Описание

Главное окно

-2

Нажимаем на Search (Поиск)

-3

Начинается поиск устройств в сети. Найденные добавляются. Можно остановить поиск кнопкой STOP

-4

Найденные устройства. При нажатии происходит переход в браузер по умолчанию в наше устройство

-5

Очень простое приложение

Пояснения по коду

Основные компоненты

lateinit var b_1: Button //Кнопка поиска
lateinit var t_1: ListView //Список устройств
lateinit var list_1: ArrayList<String> //Список устройств в памяти
lateinit var list_ip: ArrayList<String> //Список ип адресов устройств в памяти

Сохранение списка устройств в директории приложения

val file = File(filesDir,"dataUser0.saf")
file.createNewFile()
file.printWriter().use{out->
list_1.forEach{ line->
out.println(line)
}}

Загрузка списка устройств

val file = File(filesDir,"dataUser0.saf")
if (file.exists()){
list_1 = file.readLines() as ArrayList<String>
} else {
list_1 = ArrayList()
}

Получение ip адреса телефона

val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
if(wifiManager == null) return
ip = wifiManager.dhcpInfo.ipAddress

Задается глобальная переменная i равная 1. Функция асинхронная get_name_url() делает запрос на адрес из сети по номеру i и заголовком name. Т.е. например, адрес телефона 192.168.0.10. Функция делает запрос на адрес http://192.168.0.1/name. Ждет ответа. Когда ответ положительный адрес и имя добавляется в список. При ответе i увеличивается на 1. Перебор продолжается до адреса 255. За изменением состояния переменной i создан таймер

val timer = object : CountDownTimer(900000, 1000) {
override fun onTick(millisUntilFinished: Long) {

Каждый ответ проверятся, чтобы в нем не было конструкции типа "<html>". Некоторые устройства откликаются, и отправляют страницу-заглушку

Первая версия программы. Далее хочу добавить возможность делиться найденными устройствами

Ссылки

https://disk.yandex.ru/d/oKqNYComQgjpwA - исходник