Raspberry Pi - UART
Raspberry Pi має порт UART, RXD (GPIO15) і TXD (GPIO14). Сьогодні ми навчимося його використовувати. До UART можна підключити будь-який пристрій. Я підключив Bluetooth модуль. До нього підключився зі смартфону за допомогою термінальної програми SENA BTerm і таким чином мав зв’язок з Raspberry Pi. Можна підключити RaspberryPi до комп’ютера за допомогою UART-USB модуля і зробити термінальний зв’язок між Raspberry Pi та вашим комп’ютером.
Налаштування та перевірка UART
Для того, щоб використовувати виводи UART на Raspberry Pi, спочатку треба вимкнути їх застосування за замовчуванням. Для цього треба відредагувати файли: /boot/cmdline.txt і /etc/inittab Рекомендую спочатку виконати резервне копіювання цих файлів:
cp /boot/cmdline.txt /boot/cmdline.bak
cp /etc/inittab /etc/inittab.bak
Видаліть рядки "console=ttyAMA0,115200" та "kgdboc=ttyAMA0,115200" у файлі /boot/cmdline.txt за допомогою редактора nano:
nano /boot/cmdline.txt
Закоментуйте останнього рядка у файлі /etc/inittab. Поставте в символ # перед T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
nano /etc/inittab
Перезавантажте систему:
reboot
Тепер RXD (GPIO15) і TXD (GPIO14) доступні для використання UART. Встановимо програму монітора minicom:
apt-get install minicom
Запустимо програму консолі:
minicom -b 9600 -o -D /dev/ttyAMA0
Консоль працює. Набрані в консолі символи мають передаватися на приєднаний пристрій, а інформація, надіслана пристроєм, має відображатися у консолі. Якщо цього не відбувається, перевірте чи правильно ви встановили швидкість з’єднання.
Використання UART у Python
Встановимо бібліотеку pyserial для використання UART у Python:
http://softlayer-ams.dl.sourceforge.net/project/pyserial/pyserial/2.7/pyserial-2.7.tar.gz
tar xvfz pyserial-2.7.tar.gz
cd pyserial-2.7
python setup.py install
Напишемо наступний скрипт на Pyton. Файл uart_test.py:
import serial
ser = serial.Serial("/dev/ttyAMA0")
ser.write("It works!")
read = ser.read()
print read
ser.close()
Запустимо його:
python ./uart_test.py
Скрипт відправляє рядок "It works!" та чекає на інформацію з іншої сторони, приймає і виводить у консоль прийнятий символ.
Використання UART на мові програмування C
uart.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 = "Hello";
char buffer[10];
if (argc == 1) {
printf("Usage: %s [device]", argv[0]);
return -1;
}
printf("Opening %s", 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 = B115200 | CS8 | CREAD;
tcsetattr(fd, TCSANOW, &serial); // Apply configuration
// Attempt to send and receive
printf("Sending: %s", str);
int wcount = write(fd, str, strlen(str));
if (wcount < 0) {
perror("Write");
return -1;
}
else {
printf("Sent %d characters", wcount);
}
int rcount = read(fd, buffer, sizeof(buffer));
if (rcount < 0) {
perror("Read");
return -1;
}
else {
printf("Received %d characters", rcount);
}
buffer[rcount] = `\0`;
printf("Received: %s", buffer);
close(fd);
}
Компілюємо
gcc -o uart -l rt uart.c
Запускаємо:
./uart /dev/ttyAMA0
У моєму випадку довелося коригувати швидкість з’єднання у рядку
serial.c_cflag = B115200 | CS8 | CREAD;
Після заміни B115200 на B9600 і повторної компіляції все запрацювало як слід.
Використання UART як термінальної консолі
UART може виступати в якості консолі для керування RaspberryPi. Зробимо щоб через UART підіймалася справжня консоль. Така, яка з’являється, коли підключаємося через SSH. З логіном та таке інше:
nano /etc/inittab
Розремлюємо рядок:
T0:23:respawn:/sbin/getty -L ttyAMA0 9600 vt100
9600 - швидкість. Правимо якщо треба. Пересмикуємо:
kill -1 1
Тепер, коли я підключаюсь зі смартфону на Bluetooth модуль, маю повноцінну консоль Rasberry Pi. Можу керувати RaspberryPi як і з SSH клієнта. Це навряд Вам знадобиться, UART частіше використовують для зв’язку з іншими приладами, тому не забудьте повернути все як було.
Успіхів.
Дивись також:
- Raspberry Pi — що це таке?
- Raspberry Pi — GPIO
- Raspberry Pi — UART
- Raspberry Pi — FT232
- Raspberry Pi — PWM і Сервопривод
- Raspberry Pi — DHT11
- Raspberry Pi - FM Transmitter
- Прошивка AVR мікроконтролерів за допомогою Raspberry Pi
- Raspberry Pi — LCD display 1602
- Raspberry Pi — WiFi
- Raspberry-Pi — I2C (TWI)
- Raspberry Pi - DS18B20
- Raspberry Pi Camera
- nRF24L01+ ATMEGA + Raspberry Pi
- BMP180 + Raspberry Pi + WH1602
- Wi-Fi Метео станція
- Raspbian. Apache + PHP + Python + MySQL
- Встановлюємо Raspbian на Raspberry Pi без клавіатури та монітору
- IR-дистанційне керування. Використання LIRC у Python
- Raspberry Pi. Raspbian. Відправлення пошти через аккаунт Gmail
- Neoway M590 – GSM/GPRS modem
- MPU-6050 – гіроскоп – акселерометр
- HMC5883L Магнітометр
- PWM контролер з інтерфейсом I2С на базі мікросхеми PCA9685
- Метеостанція на Raspberry Pi своїми руками
- Raspberry Pi. Live-stream video
Недавні записи
- Комп'ютерний зір (Машинний зір)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
- U-FOC - Векторне керування безколекторними моторами
- FOC - своя реалізація векторного керування. Підбиваю підсумки 2022 року
- Конструктор регуляторів моторів. Підбиваю підсумки 2022 року.
Tags
ngnix flash flask i2c servo dma gpio avr solar bme280 docker eeprom sms java-script barometer rtc dht11 ssd1306 bldc motor raspberry-pi ssd1331 mpu-9250 dc-dc rfid foc st-link usb remap pwm capture soldering nodemcu lcd eb-500 esp8266 mpu-6050 nvic usart books mpx4115a timer adc bluetooth tim programmator meteo sensors led python websocket hih-4000 html pmsm mongodb bmp280 gps encoder displays smd stm32 css git examples rs-232 ethernet brushless 3d-printer watchdog max1674 exti atmega options battery uart wifi bkp piezo web
Архіви