写在前面:穷,买不起OPENCR来控制DYNAMXEL电机,只有用DYNAMXEL-Sheld+ardunio 来实现,两者之间差了5倍的价格。
DYNAMXEL-Sheld 有一个缺陷:会占用Arduino的串口。由此需要采用软串口来扩展串口。
故本文只记录一下,python 与 DYNAMXEL-Sheld 扩展板之间的软串口通信。
利用Python实现串口通信本质上是利用python给出一个信号(只能是ASCII码),通过串口(COM)传送给硬件设备,例如:Arduino、STM32等。硬件设备接收到该信号,通过已经烧录好的程序自行处理。因此,在实现过程中,主要关注点便是:①Arduino如何发出信号到串口、python如何从串口读取信息;②python如何发送信号到串口、Arduino如何从串口读取信号。
链接:https://blog.csdn.net/qq_45362415/article/details/107893410
此处是ardunio端的代码详细原理参考链接
采用串口线实现电脑与Arduino之间的通信
#include<SoftwareSerial.h>
//新建一个softSerial对象,rx:14(黄),tx:15(白)
SoftwareSerial softSerial1(14,15);
void setup() {
// 初始化串口通信:
Serial.begin(9600);
//初始化软串口通信;
softSerial1.begin(9600);
//监听软串口通信
softSerial1.listen();
pinMode(13, OUTPUT);//设置13号端口作为输出端口
digitalWrite(13,LOW);//让灯开始时亮
}
char var;
void loop(){
while( softSerial1.available()>0)//当有信号的时候
{
var= softSerial1.read();
if(var=='0')//传过来的是0
digitalWrite(13,LOW);
if(var=='1')//传过来的是1
digitalWrite(13,HIGH);//让灯开始时亮
}
}
python 端的代码
# -*- coding: utf-8 -*-
import serial
serialPort = "COM5" # 串口
baudRate = 9600 # 波特率
ser = serial.Serial(serialPort, baudRate, timeout=0.5)
print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate))
demo1=b"0"#将0转换为ASCII码方便发送
demo2=b"1"#同理
while 1:
c=input('请输入指令:')
c=ord(c)#将c转换为UTF-8标准数字
if(c==48):
ser.write(demo1)#ser.write在于向串口中写入数据
if(c==49):
ser.write(demo2)