Arduino COM port - прием и разбор данных
- Войдите на сайт для отправки комментариев
Втр, 05/09/2017 - 22:38
Потребовалось мне для моего умнеющего дома наладить общение 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;
}
}
Информацию брал из следующих источников:
Сюда публикую не ради похвастаться, а для таких же как и я. Чтобы не лопатить кучу инфы, а просто взяли и пользовались.
Понимаю, что все это не идеально и знатоки сделали бы проще и изящнее, но я на данном своем этапе развития смог решить задачу таким образом. Поэтому не судите строго, а если кому пригодиться, то это хорошо.
Не подумайте что я рекламирую данные сервисы, просто это исходные данные моей задачи.
Не корысти ради, а токмо волею пославшей мя супруги! О_О