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

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

16 января 2020 г.Просмотров: 7859Комментарии: 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.

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

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

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:

Регистрация

Вход через
Разделы
  • Пожарная сигнализация124
    • Инструкции13
    • Проекты2
  • Автоматика58
  • Отопление33
  • Мониторинг30
  • Электрика17
  • Пожаротушение32
  • Умный дом32
  • Arduino12
  • Гаджеты32
  • MaxSite CMS26
Актуальное
  • СП 484
  • Автоматизация теплого пола
  • Болид vs Рубеж
  • С2000-АСПТ
  • ПЦН в кармане
  • Системы противопожарной зашиты
  • Cloud IoT
  • Проектирование
  • Программирование
  • Ссылки
Последние комментарии
Можно ли использовать независимый расцепитель в противопожарных системах
  • Виталий » "Примечание. В статье применяется аббревиатура СПА (системы противопожарной автоматики), которая может резать глаза. Но к ней стоит привыкать, ибо аббревиатуру...
  • Андрей » Неправда Ваша. "Мысль изречённая есть ложь." Но это и не система сигнализации, а система оповещения.
  • Андрей » Замечательная статья, все по делу, все по полочкам, основательный инженерный подход, спасибо! И я тоже проходил подобные искания и копания,...
  • Андрей » Спасибо. Если данный участок расположен внутри щита (шкафа) управления вентиляцией, то контролировать его целостность не требуется, т.к. этот участок не подпадает...
  • Андрей » Думаю для данного случая подходит вариант из п.3.20: "между системой пожарной автоматики и другими инженерными системами" Корпус щита, шкафа вентиляции не является...
Последние загрузки
Все загрузки
Дискуссии на форуме
  • КПБ
  • Выбор ОПС для коттеджа
  • Отключение питания раздвижных дверей при пожарном сценарии.
Реклама

Power Adapter Supply AC 110V/220V To DC 5V 12V 24V Lighting Transformer 1A 2A 3A 5A 6A 8A 10A LED Strip Power Adapter For CCTV

NEWACALOX EU/US 60w DIY Adjustable Temperature Electric Soldering Iron Welding Kit Screwdriver Glue Gun Repair Carving Knife

UKK 80A Din Rail Terminal Blocks One in several out Power Distribution Block Box Universal Electric Wire Connector Junction Box

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