• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO

 

Как управлять последовательным
чтением и записью Raspberry Pi

 

 

Мы покажем вам, как выполнять эту последовательную запись с помощью адаптера RS232-TTL для создания обратной связи с Raspberry Pi, и та же концепция будет работать с любым последовательным устройством. Вы узнаете, какие контакты GPIO вам нужно использовать, чтобы иметь возможность подключать ваше последовательное устройство к Raspberry Pi, и мы также будем показывать шаги, которые вы должны пройти, чтобы позволить Raspberry Pi читать и писать через TX. и контакты RX GPIO. Мы также научим вас читать и записывать данные через последовательные порты с помощью языка программирования Python, и это должно дать вам хорошее представление о том, как вы будете работать со стандартными последовательными устройствами, а не только с обратной связью с Raspberry Pi.

Подключение Raspberry Pi к Serial Pi

На вашем адаптере RS232-TTL вы должны найти как минимум четыре соединения, некоторые схемы имеют больше соединений, но вам нужны только четыре: VCC (вывод питания IC), TX (переданные данные), RX (полученные данные). и GND (контакт заземления) Вы можете подключить провода напрямую к контактам GPIO или использовать макетную плату в качестве посредника, как мы делали в этом руководстве. В основном мы делали это, потому что у нас не было доступного провода для макетов между жен разъемами.

 

 

Подключение адаптера RS232 к TTL к Raspberry Pi - это простой процесс, требующий, чтобы к последовательному разъему было подключено только 4 GPIO, а еще лучше - все 4 необходимых контакта GPIO расположены в ряд, так что за ним легко следить. . Воспользуйтесь нашей таблицей и руководством ниже, чтобы подключить последовательный разъем к Raspberry Pi.

VCC подключается к контакту 4 .

TX подключается к контакту 8 .

RX подключается к выводу 10 .

GND подключается к контакту 6 .

 

 

Настройка Raspberry Pi для последовательного чтения и записи

1. Давайте начнем это руководство, сначала убедившись, что Raspberry Pi обновлен, выполнив следующие две команды.

sudo apt-get update

sudo apt-get upgrade

2.Теперь, когда Raspberry Pi обновлен, мы можем использовать инструмент raspi-config. Этот инструмент позволит нам легко отключить интерфейс последовательного ввода / вывода, который включен по умолчанию.

sudo raspi-config

3.Эта команда загрузит экран конфигурации Raspberry Pi. Этот инструмент позволяет нам вносить довольно много различных изменений в конфигурацию Raspberry Pi на данный момент, хотя нам нужен только один конкретный вариант.  С помощью клавиш со стрелками спуститесь вниз и выберите « 5 опций интерфейса ». После выбора этой опции вы можете нажать Enter.

4.На следующем экране вы снова захотите использовать клавиши со стрелками, чтобы выбрать « P6 Serial », нажмите Enter один раз, чтобы выбрать эту опцию.

5.Теперь вам будет предложено указать, хотите ли вы, чтобы оболочка входа была доступна через последовательный порт , выберите Нет с помощью клавиш со стрелками и нажмите Enter, чтобы продолжить.

6.Сразу после того, как вас спросят, хотите ли вы использовать оборудование последовательного порта , убедитесь, что вы выбрали Да с помощью клавиш со стрелками и нажмите Enter, чтобы продолжить.

7. После того, как Raspberry Pi внесет изменения, вы должны увидеть на экране следующий текст. « Оболочка последовательного входа отключена. Последовательный интерфейс включен ».

Прежде чем эти изменения полностью вступят в силу, мы должны сначала перезапустить Raspberry Pi. Для этого сначала вернитесь в терминал, нажав Enter, а затем ESC . Введите следующую команду в терминал Raspberry Pi, чтобы перезапустить его.

sudo reboot

8. Теперь давайте проверим, что все было изменено правильно, выполнив следующую команду на вашем Raspberry Pi.

dmesg | grep tty

Здесь вы хотите убедиться, что следующее сообщение не отображается в выводе , если его нет, вы можете перейти к следующему разделу. В противном случае начните заново с шага 2 . Эти сообщения указывают на то, что последовательный вход по-прежнему включен для этого интерфейса.

Raspberry Pi 3 и Raspberry Pi Zero W

[ttyS0] enabled

Raspberry Pi 2 и ранее, а также Raspberry Pi Zero

[ttyAMA0] enabled

 Использование последовательного чтения и записи на Raspberry Pi

В этом сегменте руководства вам потребуется подключить адаптер USB-Serial к адаптеру RS232. Затем вы хотите, чтобы USB-конец адаптера USB-Serial был подключен к USB-портам вашего Raspberry Pi. Конечно, на практике вы будете подключать свое последовательное соединение к реальному устройству, такому как модем, принтер или даже некоторые считыватели RFID, на самом деле, мы используем последовательное соединение в нашем руководстве по настройке чипа RFID RC522. В этом руководстве по последовательному порту Raspberry Pi мы просто покажем вам, как все это работает, и как вы можете читать данные, поступающие по последовательным линиям.

1. После того, как вы подключили адаптер USB-Serial и он подключен к Raspberry Pi, мы можем запустить следующую команду в терминале.

dmesg | grep tty

2. В выходных данных этой команды вы хотите отметить любые появившиеся дополнительные строки, которые также указывают USB, к которому он подключен. Например, мой собственный преобразователь был подключен к ttyUSB0, как мы показали в нашем выводе ниже. Запишите, к чему было подключено ваше USB-устройство, так как это понадобится вам для завершения обучения.

[ 2429.234287] usb 1-1.2: ch341-uart converter now attached to ttyUSB0

3.Теперь, когда мы знаем, к какому устройству подключено наше USB-устройство, мы можем приступить к программированию наших двух сценариев. Один из этих сценариев будет читать данные через порт ttyUSB0 , а другой будет записывать данные через порт ttyS0 / ttyAMA0 . Для начала мы напишем наш собственный сценарий последовательной записи, перейдите к следующему разделу, чтобы узнать, как выполнять последовательную запись в Python.

 Программирование Raspberry Pi для последовательной записи

1.Для начала давайте начнем писать наш скрипт serial_write.py , он будет записывать данные через последовательный порт. Выполните следующие две команды на своем Raspberry Pi, чтобы начать запись файла.

mkdir ~/serial

cd ~/serial

nano serial_write.py

2. В этом файле напишите следующие строки кода.

#!/usr/bin/env python

import time

import serial

Первая строка кода сообщает операционной системе, с чем ей следует попробовать запустить файл. В противном случае он, скорее всего, попытается запустить его как стандартный сценарий bash. Первый импорт - это  время . Мы используем эту библиотеку для временного засыпания скрипта время от времени для нашего тестового счетчика, и вам не нужен этот пакет, чтобы иметь возможность выполнять последовательную запись. Второй импорт -  серийный . Эта библиотека содержит все функции для работы с последовательными соединениями, это позволяет читать и писать через последовательные порты.

ser = serial.Serial(

        port='/dev/ttyS0', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0

        baudrate = 9600,

        parity=serial.PARITY_NONE,

        stopbits=serial.STOPBITS_ONE,

        bytesize=serial.EIGHTBITS,

        timeout=1

)

counter=0

Этот раздел кода в первую очередь создает экземпляр последовательного класса, настраивая его со всеми различными битами информации, с которыми ему необходимо установить соединение.

порт - определяет последовательный порт, через который объект должен попытаться выполнить чтение и запись. Для Pi 3 и Pi Zero W это должно быть tty0. Если вы используете Pi 2 и старше или базовый Pi Zero, вам следует использовать ttyAM0.

baudrate - это скорость, с которой информация передается по каналу связи.

четность - Устанавливает, следует ли выполнять проверку четности, это необходимо для обеспечения точной передачи данных между узлами во время связи.

стоповые биты - это набор ожидаемых битов, который указывает на конец символа или передачи данных.

bytesize - это количество бит данных.

тайм-аут - это количество времени, в течение которого последовательные команды должны ждать до истечения времени ожидания.

while 1:

        ser.write('Write counter: %d \n'%(counter))

        time.sleep(1)

        counter += 1

Этот код довольно прост, и он бесконечно зацикливается, непрерывно записывая текст « Write Counter: 1 » (где 1 заменяется текущим номером счетчика) в последовательный порт. Это означает, что любой сценарий или устройство, прослушивающее на другой стороне, будет постоянно получать этот текст. В каждом цикле мы используем временную библиотеку, чтобы засыпать скрипт на 1 секунду перед увеличением счетчика, и это делается для того, чтобы не спамить последовательный порт.

3.Когда вы закончите писать скрипт serial_write.py, он должен выглядеть примерно так, как показано ниже.

#!/usr/bin/env python

import time

import serial

 

ser = serial.Serial(

        port='/dev/ttyS0', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0

        baudrate = 9600,

        parity=serial.PARITY_NONE,

        stopbits=serial.STOPBITS_ONE,

        bytesize=serial.EIGHTBITS,

        timeout=1

)

counter=0

 

while 1:

        ser.write("Write counter: %d \n"%(counter))

        time.sleep(1)

        counter += 1

Убедившись, что вы ввели код правильно, вы можете сохранить файл, нажав Ctrl + X, затем нажав Y и, наконец, нажав Enter .

4.Теперь, когда мы закончили писать скрипт serial_write.py, мы пока не можем его протестировать. Во-первых, нам нужно написать скрипт serial_read.py . Причина этого в том, чтобы сказать, записываются ли последовательные записи через последовательный порт, нам действительно нужно что-то, чтобы их получать. В следующем разделе мы рассмотрим написание скрипта serial_read.py . Не беспокойтесь об этом слишком сильно, поскольку он довольно похож на код последовательной записи.

 Программирование Raspberry Pi для последовательного чтения

1.Для начала давайте начнем писать сценарий serial_read.py , он будет записывать данные через последовательный порт. Выполните следующие две команды на своем Raspberry Pi, чтобы начать запись файла.

mkdir ~/serial

cd ~/serial

nano serial_read.py

2. В этом файле напишите следующие строки кода.

#!/usr/bin/env python

import time

import serial

 

ser = serial.Serial(

        port='/dev/ttyUSB0',

        baudrate = 9600,

        parity=serial.PARITY_NONE,

        stopbits=serial.STOPBITS_ONE,

        bytesize=serial.EIGHTBITS,

        timeout=1

)

Поскольку мы уже просмотрели большой объем этого кода, мы не будем повторять его снова. Единственная разница между этим блоком кода и тем, который мы использовали в нашем сценарии последовательной записи, заключается в том, что для порта мы используем наше USB-устройство. В нашем случае это был ttyUSB0 , не забудьте изменить это, если вы получили другой результат ранее в этом руководстве по последовательному чтению и записи Raspberry Pi.

while 1:

        x=ser.readline()

        print x,

Этот фрагмент кода очень прост. По сути, он использует функцию из последовательного объекта, которую мы установили ранее в коде. Эта функция читает строку с завершением, а это означает, что она читает, пока не встретит строку, заканчивающуюся на \ n . Все, что будет после этого, будет отклонено. Как только он считывает значение, он сохраняет его в нашей переменной x .

Наконец, мы печатаем полученное значение с помощью функции ser.readline () .

3.Когда вы закончите писать serial_read.py , сценарий должен выглядеть примерно так, как показано ниже.

#!/usr/bin/env python

import time

import serial

 

ser = serial.Serial(

        port='/dev/ttyUSB0',

        baudrate = 9600,

        parity=serial.PARITY_NONE,

        stopbits=serial.STOPBITS_ONE,

        bytesize=serial.EIGHTBITS,

        timeout=1

)

 

while 1:

        x=ser.readline()

        print x

Убедившись, что вы ввели код правильно, вы можете сохранить файл, нажав Ctrl + X, затем нажав Y и, наконец, нажав Enter .

 Тестирование наших сценариев последовательного чтения и записи Python

1. Теперь, когда мы написали сценарии Python для последовательного чтения и последовательной записи, мы можем наконец приступить к их тестированию. Для этого вам потребуется два активных окна терминала. Это будет означать либо дважды открыть терминальное приложение на Raspberry Pi, либо просто запустить два отдельных SSH-соединения. Причина этого в том, что вы можете видеть, что сценарий последовательной записи и сценарий последовательного чтения работают одновременно.

2.Теперь в одном окне терминала вам нужно будет ввести следующие две команды для запуска нашего скрипта  Python serial_read.py . Этот скрипт немедленно начнет считывать все данные, которые передаются через его последовательное соединение нашим скриптом serial_write.py .

cd ~/serial

sudo python serial_read.py

3.Теперь в нашем другом окне терминала введите следующие две команды, чтобы запустить скрипт  Python serial_write.py . По сути, этот скрипт начнет вывод данных через последовательное соединение, которое мы скоро получим, используя другой наш скрипт.

cd ~/serial

sudo python serial_write.py

4. Теперь вы должны заметить, что в вашем первом окне терминала отображаются последовательные данные, которые мы записываем с помощью нашего сценария serial_write.py . Отображение данных в терминале будет означать, что мы успешно написали наши два сценария и что serial_read.py успешно получает данные из serial_write.py . Мы надеемся, что после завершения этого руководства для Raspberry Pi у вас появится представление о том, как записывать и читать данные через последовательную шину на вашем Raspberry Pi. Это руководство должно дать вам представление о том, как вы потенциально можете взаимодействовать с другими устройствами, использующими последовательный интерфейс.

 




Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 373



          

Радио для всех© 2024