Последовательная передача между Raspberry Pi 3 и XBee S2C через аппаратный ключ USB SparkFun XBee

Как мы можем включить последовательную передачу между XBee S2C и Raspi 3 через USB-порт?

С этой целью я использую аппаратный ключ проводника Sparkfun XBee. У меня есть несколько из этой комбинации, чтобы создать сеть ZigBee и протестировать протокол, кодированный в C. Однако у меня есть проблемы при чтении из /dev/ttyUSB0. BTW, проблема может быть в стороне отправителя.

XBees работают с настройкой последовательного интерфейса, данной ниже:

115200 baudrate
No parity
1 stop bit
3 character times for packetization timeout
CTS flow control is enabled
RTS flow control is disabled
API mode is enabled
API output mode is native

Поэтому я инициализировал порт в своем коде, как дали ниже:

int initport(int fd)
{
int portstatus = 0;

    struct termios options;
    // Get the current options for the port...
    tcgetattr(fd, &options);
    // Set the baud rates to 9600...'textB' un
    cfsetispeed(&options, B115200);
    cfsetospeed(&options, B115200);
    // Enable the receiver and setSTX local mode...
    options.c_cflag |= (CLOCAL | CREAD);

    //options.c_cflag &= ~PARENB;
    //options.c_cflag &= ~CSTOPB;   //When these are disabled the XBee receives data.
    options.c_cflag &= ~CSIZE;
    options.c_cflag |= CS8;
    //options.c_cflag |= SerialDataBitsInterp(8);           /* CS8 - Selects 8 data bits */
    options.c_cflag &= ~CRTSCTS;                            // disable hardware flow control
    options.c_iflag &= ~(IXON | IXOFF | IXANY);           // disable XON XOFF (for transmit and receive)
    //options.c_cflag |= CRTSCTS;                     /* enable hardware flow control */


    options.c_cc[VMIN] = 200;     //min carachters to be read
    options.c_cc[VTIME] = 5;    //Time to wait for data (tenths of seconds)


    // Set the new options for the port...
    //tcsetattr(fd, TCSANOW, &options);


    //Set the new options for the port...
    tcflush(fd, TCIFLUSH);
    if (tcsetattr(fd, TCSANOW, &options)==-1)
    {
        perror("On tcsetattr:");
        portstatus = -1;
    }
    else
        portstatus = 1;

    return portstatus;
}

Я хотел задать этот вопрос здесь, потому что я полагаю, что должен сделать некоторые модификации в некоторых файлах таким как /boot/config.txt и/или /boot/cmdline.txt. В моем поиске в сети открылся этот вид модификаций, но они не работали в моем случае.

Наконец, Raspi выполняют последнюю версию Raspbian Jessie и ядро Linux, 4.9.35-v7 +.

$uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

$cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Не колеблитесь, спрашивают любую другую деталь о моей установке.

Заранее спасибо.

0
задан 31 July 2017 в 12:06

2 ответа

Это было некоторое время, так как я отправил этот вопрос, таким образом, я даже забыл, что задал такой вопрос. Проблема была об активации XBee S2C. Единственная вещь, которую я должен был сделать, состоит в том, чтобы записать 'U' и 'B' к последовательной шине. После этого устройство готово послушать данные, которые Вы запишете в него. Я упомянул эту проблему и решение в нашей статье журнала, к которой можно получить доступ в https://authors.elsevier.com/a/1XK7x3sf~xzj7o

Спасибо, снова!

1
ответ дан 2 November 2019 в 20:49

Аппаратный ключ, который Вы показываете здесь, использует микросхему FTDI, таким образом, это - основной USB к преобразователю RS232. В Ubuntu можно добраться до работы легко путем добавления пользователя к dialout и tty группы. Посмотрите этот поток для получения дополнительной информации: UDEV управляет для FTDI, не абсолютно рабочего

0
ответ дан 2 November 2019 в 20:49

Другие вопросы по тегам:

Похожие вопросы: