Вопрос: Serial в Python - передача байта и/или массива (тема закрыта - убежал на Си)

Тема в разделе "Raspberry Pi", создана пользователем Igor68, 22 ноя 2016.

  1. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Собственно вопрос потому как надо быстро наладить а в СИ пока не с руки - как в питоне передать ардуине по последовательному порту байты... именно байты а не символы... ну и массив тоже.
    Надо формировать пакеты для ModbusRTU, передавать и получать ответ в той же форме. На Си это нормально, но сейчас идёт отладка ардуины... и требуется "по быстрому" формировать запросы для него из малины... ну и получать ответы соответственно. С символами вопросов нет.
    Вообще питон применяю исключительно только для "попробовать", "испытать" и.... что бы быстро и под рукой - потому и знаний о нём довольно мало.
    Спасибо!
     
    Последнее редактирование: 22 ноя 2016
  2. Igor68

    Igor68 Гуру

    Что-то искал... искал... и попались только символьные параметры - это же извращение.
    Вот кое-что испытал:
    Код (Python):
    #!/usr/bin/python
    # coding: utf-8

    import os
    import time
    import serial

    print("------TEST SERIAL-------")

    ser = serial.Serial( '/dev/ttyUSB0', 9600, timeout=10 )

    ser.write('0')

    a = 100
    while a > 0:
            db = 0x31
            s = ser.readline()
            print(len(s))
            print(s)
            ser.write('\x31')
            time.sleep(0.1)
            a = a - 1
    #
    ser.write('\x30')
    time.sleep(1)
    ser.close();
     
    В этом случае ser.write('\x31') посылаю шестнадцатеричное значение 0x31, что сооветствует клавише "1" - но это точно паранойя!
    Может кто ткнёт носом в документацию... потому как help в python ничего кроме настроек для порта не дал.
     
  3. Igor68

    Igor68 Гуру

    В питоне... что-то ничего не вышло...
    Ухожу на Си (тупой тест):
    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <termios.h>
    int main(int argc, char* argv[]) {
        struct termios serial;
        char* str = "135135135135135135";
        char buffer[10];
        if (argc == 1) {
            printf("Usage: %s [device]\n\n", argv[0]);
            return -1;
        }
        printf("Opening %s\n", argv[1]);
        int fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY);
        if (fd == -1) {
            perror(argv[1]);
            return -1;
        }
        if (tcgetattr(fd, &serial) < 0) {
            perror("Getting configuration");
            return -1;
        }
        // Set up Serial Configuration
        serial.c_iflag = 0;
        serial.c_oflag = 0;
        serial.c_lflag = 0;
        serial.c_cflag = 0;
        serial.c_cc[VMIN] = 0;
        serial.c_cc[VTIME] = 0;
        serial.c_cflag = B9600| CS8 | CREAD;
        tcsetattr(fd, TCSANOW, &serial); // Apply configuration
        // Attempt to send and receive
        printf("Sending: %s\n", str);
        int wcount = write(fd, str, strlen(str));
        if (wcount < 0) {
            perror("Write");
            return -1;
        }
        else {
            printf("Send %d characters\n", wcount);
        }
        int rcount = read(fd, buffer, sizeof(buffer));
        if (rcount < 0) {
            perror("Read");
            return -1;
        }
        else {
            printf("Received %d characters\n", rcount);
        }
        buffer[rcount] = '\0';
        printf("Received: %s\n", buffer);
        close(fd);
    }
     
    В данном случае пакет передаваемый ардуине:
    char* str = "135135135135135135";
    Конечно это проба и... просто строка а не блок Modbus RTU и в ардуине не готово пока процедура работы с протоколами. Хотя байты 0x31 0x33 0x35 соответственно с каждым байтом увеличивается скорость моторчиков и изменяется положение камеры по горизонтали и вертикали. Скорость реакции устраивает со стороны Arduino по I2C с ComMotion shield for 4 motors и Multiservo.

    Простите ! Тема закрыта и никому не нужна. Понимаю, что многие в основном работают с символами и строками. Да и питон под это похоже заточен. У меня не вышло.
    Спасибо!