1、前言
最近在使用micropython来使用STM32F411CEU6TR,给我的感觉是:没有像使用c语言那样的自由,有一些引脚不能够自主设计,不触及底层代码,但是对于初学者来说非常友好,可操作性大大提高,各种代码的使用接近口语,方便使用。
2、软件的使用
一个是MU,这个对于有些电脑来说可能使用不了,比如ROG部分电脑,所以我使用的thonny,这两个软件在网上都可以搜到,所以就不在这里上传文件了
3、thonny的使用
使用这个软件需要更改一些设置
更改上述操作之后就可以使用我们的stm32了,这里选择ESP32使用有些库别的好像没有,我使用的时候OLED不能使用,说是在别的库里面没有包含那个库。(个人理解,如果有别的解释请在评论区交流,谢谢咯)
4、代码开展
接下会逐步解析我们所要使用的代码,分别是蓝牙模块,电机模块、oled模块,超声波模块,以及我们驱动电机的L298N模块
蓝牙模块需要我们先调试与设置我们的蓝牙,这个部分很重要,同时会出现很多意想不到到的错误,比如发送AT指令没有回收,或者发送其他的指令出现错误或者没有回复信息,这里只提供解决思路以及可能会出现的情况,如何解决
进入蓝牙的模式要注意,HC-05要按着按键,HC-06不需要,但是两个的发送数据的格式不一样,这个要去搜一下,CSDN有很多的文章讲解!首先如果蓝牙AT指令没有用,那么需要注意你的波特率是否有问题,是否选择了对应的串口,是否打开了串口,同时你的蓝牙接线是否有问题,这个要尤其注意,RX-TX这个要反接!!!
如果以上都尝试并且没有结果,那么可以看看你的蓝牙时候出现了问题,AT指令完成之后,接下来大概率不会遇到别的问题,按照你想要的指令就好了
如果出现以下错误:串口设置的时候出问题,显示error那么你直接搜索HC-05/6error,注意看清楚错误序号,不同序号对应的错误不同,如果没有反应,那么可以搜搜别的蓝牙调试方法,修改波特率的方式有很多种,都试试(一眼AT指令可以的,就可以使用)
调试完成之后:
打开我们的手机连接即可,这个需要下载专门的软件,自己在网上搜搜就好啦!
from pyb import UART
import time
u1 = UART(1)
while True:
HC = u1.read() # 读取蓝牙数据
if duqu: # 如果有数据,打印出来
print(HC)
time.sleep(2) # 每2秒读取一次数据
这个就是我们的蓝牙设置,非常的简洁!不需要过多解释了已经
电机模块,L298N我使用的是两路PWM(下面的代码没有)另外两个引脚我直接上拉,另外两个引脚我分别跳线帽短接了,然后通过调节站控比,来改变转速
from machine import Pin
import time
# 定义控制电机1的引脚
in1 = Pin('PA1', Pin.OUT)
in2 = Pin('PA2', Pin.OUT)
# 定义控制电机2的引脚
in3 = Pin('PA3', Pin.OUT)
in4 = Pin('PA4', Pin.OUT)
# 函数:控制电机1的正转和反转
def motor1_forward():
in1.on() # IN1 = 1
in2.off() # IN2 = 0
def motor1_backward():
in1.off() # IN1 = 0
in2.on() # IN2 = 1
def motor1_stop():
in1.off() # IN1 = 0
in2.off() # IN2 = 0
# 函数:控制电机2的正转和反转
def motor2_forward():
in3.on() # IN3 = 1
in4.off() # IN4 = 0
def motor2_backward():
in3.off() # IN3 = 0
in4.on() # IN4 = 1
def motor2_stop():
in3.off() # IN3 = 0
in4.off() # IN4 = 0
# 示例:电机前进、后退和停止
while True:
print("电机1 前进")
motor1_forward() # 电机1正转
print("电机2 后退")
motor2_backward() # 电机2反转
time.sleep(2) # 持续2秒
print("电机1 停止")
motor1_stop() # 电机1停止
print("电机2 停止")
motor2_stop() # 电机2停止
time.sleep(2) # 停止2秒
print("电机1 后退")
motor1_backward() # 电机1反转
print("电机2 前进")
motor2_forward() # 电机2正转
time.sleep(2) # 持续2秒
print("电机1 停止")
motor1_stop() # 电机1停止
print("电机2 停止")
motor2_stop() # 电机2停止
time.sleep(2) # 停止2秒
参考这个就可以了,真的很简洁,熟悉一段时间之后就能很快的熟练使用,后续我们就需要调PWM波咯,这个也很简单,就不做介绍了
oled和超声波模块(这个好像与温度有点关系)
from machine import I2C
import time #串口触发模式,插上跳帽
from pyb import UART
# 初始化I2C和OLED
i2c = machine.I2C(-1, sda=machine.Pin("PB12"), scl=machine.Pin("PB13"), freq=400000)
from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 64, i2c)
# 初始化串口
uart = UART(2, 9600) #TX-A2, RX-A3
uart.init(9600, bits=8, parity=None, stop=1) # 初始化参数
# OLED初始显示
oled.text("Hello LYF", 0, 0)
oled.show()
# 主循环
while True:
time.sleep(1)
# 发送开始测量指令
uart.read()
uart.write(b'\x55') #开始测量指令
time.sleep(1)
# 读取距离数据
buf1 = bytearray(2)
uart.readinto(buf1, 2)
distance = (buf1[0] * 256 + buf1[1]) / 10 # 距离值,单位:cm
# 发送温度读取指令
uart.read()
uart.write(b'\x50')
time.sleep(1)
# 读取温度数据
buf2 = bytearray(1)
uart.readinto(buf2, 1)
temperature = buf2[0] - 45 # 温度值
# 输出到控制台
print("Distance = {}cm".format(distance))
print("Temperature = {}".format(temperature))
# 显示到OLED
oled.fill(0) # 清除屏幕
oled.text("Distance: {}cm".format(distance), 0, 0) # 显示距离
oled.text("Temp: {}C".format(temperature), 0, 10) # 显示温度
oled.show() # 刷新显示
这个是oled和超声波的互通,显示效果
使用oled的时候要把下面的那个文件放在芯片里面
到这里差不多就结束了,然后我们就可以造出我们的车车啦。
我们焊了洞洞板,其实可以走线更好一点,这个还可以完善一点,把排针放在下面,这样上面就看不到我们的线了,看起来就更好一点。
5、总结
从这个过程中,我学到了很多东西,尽管这些代码看起来还是很简单,但是刚开始的时候还是很不明白,有种不清不楚的感觉,不知道要干什么,然后就是一点一点摸错把,蓝牙和oled我调试了很久,遇到了很多很多的错误,上述可能还有一些东西没有说明完全,如果有需要,可以在评论区留言,或者有其他的见解也可以一起交流!
如有错误欢迎指正!
大乱斗
标签:micropython,Pin,电机,蓝牙,STM32,oled,time,print From: https://blog.csdn.net/2301_80044751/article/details/142262010