Arduino COM port - прием и разбор данных

CheBuraw
Offline
Зарегистрирован: 10.02.2015

Потребовалось мне для моего умнеющего дома наладить общение MajorDoMo с Arduino через esp8266 с прошивкой HomesSmart. Не подумайте что я рекламирую данные сервисы, просто это исходные данные моей задачи. Так вот в HomesSmart есть возможность через адресную строку браузера отправлять комманды Arduino на UART по WiFi используя как шлюз esp8266.
Я долго искал как можно принимать команды через UART и получать не просто текстовые строки, а непосредственно данные. В общем после моих долгих мытарств и поисков у себя реализовал это следующим образом.

#include <string.h>
 
char unitID_in[10];
char data_in[100];
int data;
byte unitID; 

int param1; // просто какая-то переменная. Нужна для демонстрации в switch

void setup() {
  // открываем порт 
  Serial.begin(9600); 
}
 
void loop() {         

// =\/= Прием и обработка UART =\/= 
int i=0;
char buffer[100]; 
//если есть данные - читаем
  if(Serial.available()){
     delay(100);
     //загоняем прочитанное в буфер
     while( Serial.available() && i< 99) {
        buffer[i++] = Serial.read();
     }
     //закрываем массив
     buffer[i++]='\0';
  }
//если буфер наполнен
  if(i>0){  
    //разбераем его на части отделенные точкой
    sscanf(buffer, "%[^'.'].%s", &unitID_in, &data_in);
 unitID = atoi(unitID_in);
 data = atoi(data_in);
 write_Command();
  }
// =/\= Прием и обработка UART =/\=    

}


void write_Command() {
     switch (unitID) {
	case 1 : // выполняется если отправили в командную строку только цифру 1
      Serial.println("Hello!");
	  break;
	case 2 : // выполняется если отправили в командную строку 2."значение" (без кавычек)
     param1 = data; // Ваше значение записывается в переменную param1
      Serial.print("param1: ");
      Serial.println(data);
	  break;
      }
}
Информацию брал из следующих источников:
 
Сюда публикую не ради похвастаться, а для таких же как и я. Чтобы не лопатить кучу инфы, а просто взяли и пользовались.
Понимаю, что все это не идеально и знатоки сделали бы проще и изящнее, но я на данном своем этапе развития смог решить задачу таким образом. Поэтому не судите строго, а если кому пригодиться, то это хорошо.
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

CheBuraw пишет:

Не подумайте что я рекламирую данные сервисы, просто это исходные данные моей задачи. 

Не корысти ради, а токмо волею пославшей мя супруги! О_О