如何通过串行通信正确发送 int

How to properly send an int over serial communication

我正在尝试通过串行通信使用 python 和 arduino 来控制伺服电机,但我似乎无法找到如何将 int 值发送到 arduino。 (无法转换为字符串,因为 str 函数不支持 unicode)。

代码打开一个带有 x 轴和 y 轴的 window 并将坐标打印到屏幕上。它们都是 int 类型。如何将它们发送到 arduino 以移动伺服?

import serial
import time
import pygame

port = serial.Serial("COM3", baudrate=9600)
time.sleep(1)

WIDTH, HEIGHT = 540, 540
WIN = pygame.display.set_mode((WIDTH, HEIGHT))


Color = (255,255,255)


def main():
        run = True
        while run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                #get position x,y mouse
                x, y = pygame.mouse.get_pos()
                #Draw y line
                pygame.draw.line(WIN, Color, (0, y), (WIDTH,y)) 
                #Draw x line
                pygame.draw.line(WIN, Color, (x, 0), (x, HEIGHT)) 
                #Draw circle
                pygame.draw.circle(WIN, (139,0,0), (x, y), 5, 0)
                pygame.display.flip()
                print(x,y)

                WIN.fill([0,0,0])
                time.sleep(0.15)


if __name__ == "__main__":
    main()

和这个arduino代码

#include <Servo.h>
Servo myservo;
int x;
void setup() {
  myservo.attach(9); 
  Serial.begin(9600);
}


void loop() {
  while (Serial.available())
  {
    x = Serial.read();
  }
}

尝试在发送前将其转换为字节

msg = bytes('1', 'utf-8')

收到后转成int

您可以像这样将整数转换为字节数组

ba = bytearray(struct.pack("i", num))

然后通过串口发送字节数组

ser.write(ba)

在 arduino 端,您现在读取字节并“构建”int 数据类型。