• Обратная связь
  • Карта сайта
  • Отзыв
  • Комментарии
  • Форум
discord
Технические заметки
  • Главная
  • Лекции
  • Практикум
  • Обзоры
  • Сравнение
  • Нормы
  • События
  • Вход
ГлавнаяArduinoМониторинг
Отправляем состояния теплых полов из Arduino UNO ESP8266 WiFi на сервер ThingSpeak
Можно ли заставить работать "C2000-Ethernet"?

Получаем уровень связи WiFi модуля ESP8266

16 января 2020 г.Просмотров: 7383Комментарии: 0
ArduinoМониторингArduinoESP8266WiFi

Использовать плату, на которой совмещены UNO R3 + WiFi Esp8266, показалось очень удобным способом.

В предыдущей статье добились, чтобы совмещенная плата Arduino UNO с WiFi посылала POST при помощи AT-команд, без использования библиотеки WiFiEsp.

Теперь найдем способ получать уровень сигнала RSSI WiFi точки доступа, к которой подсоединен модуль ESP8266 платы.

Стоимость будет аналогичная.

Но, если стоимость отдельных устройств 214+100=314р, то стоимость совмещенной платы будет 460р.

460р 214р 100р
UNO R3 + WiFi UNO R3 ESP8266 Esp-01 WIFI

Считаю, что разницу в 132р можно и доплатить за удобство.

Для работы WiFi модуля с Arduino предлагается использовать библиотеку WiFiESP, для чего необходимо было бы обновить прошивку.

Но зачем это делать и зачем использовать лишний код библиотеки, если имеется совсем тривиальная задача просто отсылать значения датчиков на сервер?

Это делается просто, AT командами.

Но иногда может быть необходимо изучить результат работы

Как обработать результат выполнения AT команды ESP8266.

Все в той же предыдущей статье было необходимо убедиться, что POST запрос к серверу с показаниями датчиков отправлен.

Для этого искали в ответе признак успешности передачи при помощи функции Serial.find():

readReplay = "OK";
if (Serial.find(readReplay))
{
}

Для получения из ESP8266 сведений о доступных ей WiFi сетях служит команда AT+CWLAP, которая возвращает перечень сетей с дополнительной информацией о них:

+CWLAP:ecn,ssid,rssi,mac,channel
OK

Отсюда и можно получить RSSI.

В списке доступных сетей может быть несколько сетей и нам нужно осуществить селекцию по нужному имени WiFi сети текущего соединения.

В библиотеке WiFiESP для получения RSSI сети, к которой подключен ESP8266, использовалась функция WiFi.RSSI().

Как это реализовано для парсинга Serial с целью получения RSSI текущего соединения можно посмотреть в процедуре EspDrv::getCurrentRSSI() файла EspDrv.cpp:

int32_t EspDrv::getCurrentRSSI()
{
    int ret=0;
    char buf[10];
    sendCmdGet(F("AT+CWJAP?"), F(",-"), F("\r\n"), buf, sizeof(buf));
    if (isDigit(buf[0])) {
      ret = -atoi(buf);
    }
    return ret;
}

Парсинг Serial осуществляет функция sendCmdGet(), реализованная в том же файле.

Это универсальная функция, основанная на библиотеке RingBuffer.h, и можно было бы вычленить из файла EspDrv.cpp нужный функционал.

Но в моем случае задача значительно упрощается.

Ответ ESP8266 на команду AT+CWLAP вот такой:

+CWLAP:(3,"Keenetic-0138",-81,"85:a8:5d:85:eb:a8",1)

Поэтому, достаточно найти в Serial последовательность "38", пропустить два символа, и взять три символа в которых будет содержаться RSSI.

Вот какой кусок кода это делает:

// получим и отобразим уровень сигнала
// код рабочий для очень частного случая
// String curRSSI; объявлено ранее
// на Serial в совмещенной плате UNO + ESP8266 сидит ESP8266.
void getRSSI()
{
  char c1;
  char c2;
  curRSSI = "";
  Serial.println("AT+CWLAP");
  if (Serial.available()) 
  {
    delay(100);
    while (Serial.available() > 0) 
    {
      c1 = (char)Serial.read();
      c2 = (char)Serial.read();
      if ((c1=='3') and (c2=='8'))
      {  
         c1 = (char)Serial.read(); // пропускаем два значения
         c2 = (char)Serial.read();
         for(int i=0; i<3; i++)  // читаем три значения
         {
           c1 = Serial.read();
           curRSSI += c1;
         }  
         lcd.setCursor(5, 0);
         lcd.print(curRSSI);
         break;  
      }   
    }
  }
}

Код работает не всегда и не на всех платах.

Проблемы в строке if ((c1=='3') and (c2=='8'))

Вместо 8 у нас что-то непонятное.

Поэтому придумаем другой код для чтения RSSI:

// глобальные переменные объявлены ранее: 
// String curRSSI="0"; 
// int crssi=0; 
// String ssid ="Keenetic-0138";
void getRSSI()
{
  char c1;
  String val;
  int i;
  curRSSI = "";
  Serial.println("AT+CWLAP=\"" + ssid + "\"");
  delay(1500);
  if (Serial.available()) 
  {
    delay(500);
    while (Serial.available() > 0) 
    {
      for (i=0; (i<27); i++) 
         { c1 = (char)Serial.read(); delay(2); }
      for (i=0; (i<2); i++) 
         { 
            c1 = (char)Serial.read(); val += c1; delay(2); 
         }
    }  
    crssi = val.toInt();
    if (crssi) 
    {
       curRSSI = val;
       lcd.setCursor(5, 0);
       lcd.print(-crssi); 
    }       
  }   
}

С эти кодом тоже не всегда все гладко.

Через раз вместо ожидаемого

+CWLAP:(3,"Keenetic-0138",-81,"85:a8:5d:85:eb:a8",1)

в Serial находится еще и сама команда.

Придется все таки поместить весь ответ в переменную String и затем взять подстроку после имени сети.

void getRSSI()
{
  char c1;
  String val = "";
  int i;
  curRSSI = "";
  Serial.print("AT+CWLAP=\"" + ssid + "\"\r\n");
  delay(500);
  if (Serial.available()) 
  {
    while (Serial.available() > 0) 
    {      
       c1 = (char)Serial.read(); val = val + c1; delay(2);
    }  
    int pos = val.indexOf(ssid);
    pos = pos+ssid.length()+3;
    curRSSI = val.substring(pos, pos+2);
    
    // Serial.println(curRSSI);
    crssi = curRSSI.toInt();
    if (crssi) 
    {
       lcd.setCursor(5, 0);
       lcd.print(-crssi); 
    }       
  }  
}

Этот код уже работает без проблем.

Использовал этот код в скетче для мониторинга состояния отопления теплыми полами при помощи облачного сервиса ThingSpeak.

Еще записи по теме

Подключаем Arduino UNO при помощи ESP8266-12E  к облаку Cayenne
Подключаем Arduino UNO при помощи ESP8266-12E к облаку Cayenne
Как у меня заработал WIFI для Arduino ESP8266 ESP-12E
Как у меня заработал WIFI для Arduino ESP8266 ESP-12E
Отправка данных из ESP8266WiFi на сервер с CMS MaxSite
Отправка данных из ESP8266WiFi на сервер с CMS MaxSite
Мониторинг по интернет загазованности помещения с Arduino UNO и ESP8266 ESP-12E
Мониторинг по интернет загазованности помещения с Arduino UNO и ESP8266 ESP-12E
Используем Arduino UNO с WiFi на одной плате для POST запроса на сервер
Используем Arduino UNO с WiFi на одной плате для POST запроса на сервер
Отправляем состояния теплых полов из Arduino UNO ESP8266 WiFi на сервер ThingSpeak
Отправляем состояния теплых полов из Arduino UNO ESP8266 WiFi на сервер ThingSpeak
Оставьте комментарий.

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question


Выберите для анонимного комментирования (комментарий будет опубликован после проверки).

     

  

Выберите если нужно войти или зарегистрироваться и оставить комментарий от своего аккаунта.

Войти, используя

(обязательно)

Подписка на новости
discord

Email:

Регистрация

Вход через
Разделы
  • Пожарная сигнализация123
    • Инструкции13
    • Проекты2
  • Автоматика55
  • Отопление33
  • Мониторинг30
  • Электрика16
  • Пожаротушение32
  • Умный дом32
  • Arduino12
  • Гаджеты32
  • MaxSite CMS26
Актуальное
  • СП 484
  • Автоматизация теплого пола
  • Болид vs Рубеж
  • С2000-АСПТ
  • ПЦН в кармане
  • Системы противопожарной зашиты
  • Cloud IoT
  • Проектирование
  • Программирование
  • Ссылки
Последние комментарии
Какие бывают табло "Выход" и как их правильно подключить
  • Александр » Добрый день. В пансионате табличка выход горит настолько ярко, как светильник, что ночью не возможно спать. Есть ли какой либо стандарт...
  • Андрей » табличка выход горит настолько ярко, как светильник, что ночью не возможно спать Хорошие видимо таблички. Обычно они еле светятся...
  • Андрей » В пансионате думаю можно и переделать алгоритм работы - чтобы загоралась только во время тревоги.
Достаточно ли на объекте установить один пожарный прибор?
  • Ant » С интересом изучаю Ваши статьи. Кое-что использую в работе. Вы сталкивались с блоками реле "Арсенала Безопасности"? Это для приборов Гранит-3,5........
  • Андрей » с блоками для Гранит Видел такой пару раз в старинных Гранитах. Работали.
Последние загрузки
Все загрузки
Дискуссии на форуме
  • КПБ
  • Выбор ОПС для коттеджа
  • Отключение питания раздвижных дверей при пожарном сценарии.
Реклама

New type 1pcs/lot Mini Fast Wire Connector Universal Wiring Cable Connector Push-in Conductor Terminal Block PCT-222 SPL-62/42

DIY Smart WiFi Light LED Dimmer Switch Smart Life/Tuya APP Remote Control 1/2 Way Switch,Works with Alexa Echo Google Home

Hikvision Compatible Anpviz 5MP Bullet IP Camera POE Outdoor/Indoor 30m IR Security Camera With Microphone Audio Onvif IP66

Пожарка 125 Проектирование 97 Болид 64 Лекции 58 Социальное 53 Рубеж 49 Обзор 46 Автоматика 45 Инженерные системы 38 Курьез 35 Адресные системы 35 Практикум 34 Пожаротушение 34 Отопление 33 Интернет Вещей 29 MaxSite 28 ГОСТ 25 Облачный Сервис 24 Терморегуляторы 24 Мониторинг 22 Теплый пол 21 Плагин 21 Сравнение 20 AliExpress 20 ППУ 20 Техобслуживание 19 СП 484 19 Законы Ома 19 Вентиляция 18 Эксплуатация 18 Астра 17 ППК 17 Клапана 15 С2000-АСПТ 14 Электрика 14 Рубикон 13 Оповещение 13 Arduino 13 WiFi 12 С2000М 12 Ritm 11 Гранд Магистр 11 Датчики 11 Насосная Станция 11 Юнитест 10 ESP8266 10 ПЦН 9 ВЭРС 9 Сценарии 8 Авария 8 Жилой дом 8 Программирование 7 Отзыв 7 Taggallery 7 Сообщества 7 Диспетчеризация 7 Освещение 6 Плазма-Т 6 Спрут-2 5 С2000-СП4 5 ПО 5 Гаджеты 5 Радиоканал 4 МПТ 4 GeoRITM 4 МПН 4 Учет ресурсов 3 Баня 3 Версет 3 Гранит 3 Рубеж-2ОП 3 My_ESP8266 3 Visio 3 ИПДЛ 3 Navigard 3 РИП 3 Firesec3 3 Zigbee 2 Security Hub 2 Гидравлика 2 ТО 2
  • Обратная связь
  • Карта сайта
  • Отзыв
  • События
  • Комментарии
  • Форум
© Технические заметки 2026. Работает на MaxSite CMS. ( Вход )
Автор не несет ответственность за последствия применения материалов сайта на практике.