Micropython-RaspberryPiのGPIOに基づくUARTシリアル通信

因为我的USB-TTL模块出了问题,所以只好使用GPIO口和树莓派实现通信,在此记录。


この記事では、Raspberry PiのGPIOポートを使用して、UART通信機能を実現します。読者がUSBからTTLを使用してUART通信を実現したい場合は、記事を参照してください: UARTを介したRaspberryPiの上位および下位コンピューターとのシリアル通信の実現

GPIOピン機能図(4B)

ここに画像の説明を挿入

より具体的に:
ここに画像の説明を挿入

ハードウェア接続

PYB ラズベリーパイ
TX(X3) RX(15)
RX(X4) TX(14)
GND GND

ここに画像の説明を挿入

UART通信コード

PCラズベリーパイ

# -*- coding:utf-8 -*-
import serial
import time
ser = serial.Serial("/dev/ttyAMA0", 9600)
ser.flushInput()  
ser.write("begin".encode("utf-8")) 
def main():
    while True:
        count = ser.inWaiting() 
        if count != 0:
            recv = ser.read(count) 
            ser.write("Recv some data is : ".encode("utf-8"))  
            ser.write(recv)  
            ser.write("\n".encode("utf-8"))  
            print(ser.readline())
            ser.flushInput()

if __name__ == '__main__':
    main()

下のコンピューターのPYBエンド

from pyb import UART

class Serial:
    def __init__(self, uart):
        self.uart = uart

    def data_check(self):
        return self.get_data()

    def send_data(self):
        data = "hi i'm pyboard!\n"
        data.encode("utf-8")
        self.uart.write(data)
        # print("send!")

    def get_data(self):
        start = utime.ticks_ms()
        data = self.uart.readline()
        if data != None:
            print("get data!!!!!")
            try:
                data.decode("utf-8")
            except:
                pass
            end = utime.ticks_ms()
            print("running time:", end - start)
            print(data)    
            return True
        else:
            return False
 
uart = UART(2, 9600)
ser = serial.Serial(uart)
while True:
	ser.send_data()
    ser.get_data()

コミュニケーション効果

ラズベリーパイ

ここに画像の説明を挿入

ALLエンド

プログラムのタイミングによって取得:各UART通信には19ミリ秒かかります
ここに画像の説明を挿入

異なるボーレートでのシリアルポート伝送速度

Raspberry PiとPYBのUARTボーレートを115200に上げてみてください。再起動後、各シリアル通信にかかる時間はわずか2ミリ秒です。
ここに画像の説明を挿入

参考記事:

おすすめ

転載: blog.csdn.net/qq_45779334/article/details/112795626
おすすめ