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