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

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

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

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
    • Проекты1
  • Автоматика52
  • Отопление33
  • Мониторинг30
  • Электрика16
  • Пожаротушение29
  • Умный дом32
  • Arduino12
  • Гаджеты32
  • MaxSite CMS26
Актуальное
  • СП 484
  • Автоматизация теплого пола
  • Болид vs Рубеж
  • С2000-АСПТ
  • ПЦН в кармане
  • Системы противопожарной зашиты
  • Cloud IoT
  • Проектирование
  • Программирование
  • Ссылки
Последние комментарии
Контроллер теплых полов Beok CCT-10 с AliExpress для зонального отопления
  • Андрей » Я считаю что лучше нормально закрытый. То есть который закрыт при отсутствии на нём напряжения.
  • Андрей » И кстати, посмотрите зональный коммутатор Tim - Zeissler zc8.1.220 LED Они до 3000 стоят.
  • Asset » Спасибо, да похож внешне на BEOK, но этот лучше? И посоветуйте пожалуйста сервопривода с алика более менее надежные
  • Asset » Tim - Zeissler про данную компанию в интернете никаких отзывов нет что то.
  • Андрей » Внутри схемотехника подобная BEOK. Тим производит фурнитуру. Где-то статья у меня про то как я в интернет магазине Тим купил всё...
Последние загрузки
Все загрузки
Дискуссии на форуме
  • Пожарные системы
  • Проблемы совместимости речевых оповещателей со встроенными конденсаторами
  • Противопожарные шторы.
Реклама

Zigbee Thermostat Smart TRV Thermostatic Radiator Valve Controller Heater Temperature Voice Control Works with Alexa Google Home

Bluetooth LED Strip RGB Led Light Tape SMD 2835 DC12V Waterproof LED Light 5m 10m diode Ribbon Flexible with Bluetooth remote

ZK20 Dropshipping Hand Tools Practical Electrical Wire Cable Cutters Cutting Side Snips Flush Pliers Mini Pliers Hand Tools

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