因为我的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ミリ秒です。
参考記事: