Raspberry Pi - UART
Raspberry Pi имеет порт UART, RXD (GPIO15) и TXD (GPIO14). Сегодня мы научимся его использовать. К UART можно подключить любое устройство. Я подключил Bluetooth модуль. К нему подключился со смартфона с помощью терминальной программы SENA BTerm и таким образом организовал связь с RaspberryPi. Можно подключить RaspberryPi к компьютеру с помощью UART-USB модуля и сделать терминальную связь между RaspberryPi и вашим компьютером.
Настройка и проверка UART
Для того, чтобы использовать выводы UART, сначала нужно отключить их применение по умолчанию. Для этого нужно отредактировать файлы: /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 — ШИМ и Сервопривод
- Raspberry Pi — DHT11
- Raspberry Pi - FM Transmitter
- Прошивка AVR микроконтроллеров с помощью Raspberry Pi
- Raspberry Pi — LCD дисплей 1602
- Raspberry Pi — Wi-Fi
- 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 без клавиатуры и монитора
- ИК-дистанционное управление. Использование LIRC в Python
- Raspberry Pi. Raspbian. Отправка почты через аккаунт Gmail
- Neoway M590 – GSM/GPRS modem
- MPU-6050 – гироскоп – акселерометр
- HMC5883L Магнитометер
- PWM контролер на базе микросхемы PCA9685
- Метеостанция на Raspberry Pi своими руками
- Raspberry Pi. Live-stream video
Додати коментар
Недавні записи
- 🇺🇦 FOC Board STM32F103RB 🧩
- STM32 Motor control SDK - керування оборотами мотора за допомогою потенціометра 📑
- Flask✙Gunicorn✙Nginx➭😎
- STM32 Motor control SDK - програмне керування обертами мотора
- STM32 Motor control SDK - як створити перший проект
- Vue SVG. Приклад побудови живого параметричного креслення
- Вимірювання моменту мотора
- Vue SVG - компонент. Приклад 📑
- Flask + Vue 🏁 Финальный пример 🏁
- Flask, CORS, JSON-файл. Пример#6
Tags
bldc brushless stm32 motor web html css flask atmega foc git java-script pmsm raspberry-pi python websocket mongodb esp8266 nodemcu st-link tim timer docker ngnix programmator ssd1331 ssd1306 wifi uart meteo bme280 bmp280 i2c gps mpu-6050 mpu-9250 sensors 3d-printer options usb barometer remap watchdog flash eeprom rtc bkp encoder pwm servo capture examples dma adc nvic usart gpio books battery dc-dc sms max1674 avr lcd dht11 piezo rs-232 rfid solar exti bluetooth eb-500 displays ethernet led smd soldering mpx4115a hih-4000
Архіви