使用micropython设计STM32蓝牙智能小车

1、前言

        最近在使用micropython来使用STM32F411CEU6TR,给我的感觉是:没有像使用c语言那样的自由,有一些引脚不能够自主设计,不触及底层代码,但是对于初学者来说非常友好,可操作性大大提高,各种代码的使用接近口语,方便使用。

2、软件的使用

        一个是MU,这个对于有些电脑来说可能使用不了,比如ROG部分电脑,所以我使用的thonny,这两个软件在网上都可以搜到,所以就不在这里上传文件了

3、thonny的使用

        使用这个软件需要更改一些设置

fba6e29482274eb6bc06698371153f66.png

        更改上述操作之后就可以使用我们的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我调试了很久,遇到了很多很多的错误,上述可能还有一些东西没有说明完全,如果有需要,可以在评论区留言,或者有其他的见解也可以一起交流!
        如有错误欢迎指正!

大乱斗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值