Отправить команду на Arduino из консоли Linux и получить ответ.

Всем привет!

В системах мониторинга бывает не лишним получить на компьютер (запросить из консоли Linux) параметры с датчиков, подключаемых к МК Ардуино. Несмотря на кажущуюся простоту, задача имеет подводный камень в виде перезагрузки микроконтроллера каждый раз при попытке отправить на него данные.

Первое и очевидное: чтобы из консоли Linux отправить команду для начала нужно убедиться в наличии необходимых драйверов в ядре и самого устройства (/dev/ttyUSB0)

Затем, необходимо сконфигурировать интерфейс при помощи команды:

# stty -F /dev/ttyUSB0 ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -echo -hupcl nl

Делается каждый раз при подключении Arduino к компьютеру.

Обрабатывать команды отправляемые из консоли можно примерно так (будем плавно зажигать и гасить светодиод на 3-ем пине):

int angle = 0;

void setup() {
   // initialize serial:
    Serial.begin(9600);
    pinMode(3, OUTPUT);
}

void lights(int action) {
    int multiplier;

    if (action == 0) {
        angle = 90;
        multiplier = -1;
    } else {
        angle = 0;
        multiplier = 1;
    }
  
    for(;;) {
        angle += multiplier;
        analogWrite(3, 255*sin(angle*(PI/180)));
        if (angle ==  0 || angle == 90) {
            break;
        }
        delay(10);
    }
}

void loop() {
  // if there's any serial available, read it:
  
    while (Serial.available() > 0) {

        // look for the next valid integer in the incoming serial stream:
        int state = Serial.parseInt();
        //Serial.println(Serial.read());
        // look for the newline. That's the end of your sentence:
        if (Serial.read() == '\n') {
            if (state == 1) {
                lights(1);
            } else {
                lights(0);
            }
            Serial.println("OK");
        }
    }
    delay(10);
}

# echo "1" > /dev/ttyUSB0 | head -1 /dev/ttyUSB0
# OK
#

Добавить комментарий