首页 > 编程语言 >使用micropython设计STM32蓝牙智能小车

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

时间:2024-09-14 23:24:58浏览次数:13  
标签:micropython Pin 电机 蓝牙 STM32 oled time print

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

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="dqxhgvVG-1726327243353" src="https://live.csdn.net/v/embed/424491"></iframe>

大乱斗

标签:micropython,Pin,电机,蓝牙,STM32,oled,time,print
From: https://blog.csdn.net/2301_80044751/article/details/142262010

相关文章

  • 蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)
    目录一、页面切换内容详解1.逻辑解释2.代码详解code.c(内含详细讲解)code.hmain.c3.效果图片展示​编辑二、页面选项高亮内容详解1.逻辑解释2.读入数据FIRST.第一种高亮类型code.c(内含代码详解)code.hmain.cSECOND.第二种高亮类型3.效果展示开源代码一、页......
  • stm32驱动HX711称重传感器 c++代码分享
    一、HX711模块介绍HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。HX711模块通常配合称重传感器一起使用,例如压力传感器、负载细胞等。它采用24位的模数转换器(ADC)来精确测量传感器的电压变化。HX711模块具......
  • STM32CubeIDE看门狗
    看门狗简介看门狗:本质是一个递减的计数器当程序有BUG或硬件问题导致的程序卡死或跑飞时,看门狗可及时复位程序作用:防止程序卡死或程序跑飞,保证系统的可靠性和稳定性STM32有独立看门狗(IWDG)和窗口看门狗(WWDG)两种类型独立看门狗:独立工作,对时间精度要求较低窗口看门狗:时间精......
  • ubuntu下stlink烧录stm32代码
    ubuntu下stlink烧录stm32代码,记录备忘0、环境一、下载stlink驱动 二、编译  三、安装stlink驱动 四、验证安装成功 usb口接stlink后,查到设备五、烧录 六、其它  ......
  • OM6626低功耗国产蓝牙芯片对比进口NORDIC系列NRF52810/NRF52832
    OM6626是一款超低功耗的蓝牙soc主要特性:支持BLE5.3支持SIGMesh支持2.4G长包主频64Mhz,80KBRAM主要应用在esl电子价签,IoT模组、CGM、高报告率HID设备PUM特点1.71~3.6v供电电压1秒间隔广播平均电流:9uA;1秒间隔连接平均电流:7uA峰值电流:TX@0dB:4mA,RX@1Mbps:3mABLE特点支......
  • STM32F103C8T6新建工程
    一、建立工程文件夹,keil中新建工程,选择型号首先在桌面新建一个STM32project的工程,以后我们的工程都存在这个文件夹下面,这样比较方便管理。 接下来双击keil5运行,点击Project中的NewuVisionProject。 接下来,在之前新建好的STM32Project中,新建2-1moban文件夹,在它里面来存放......
  • 门磁模块详解(防盗感应开关 STM32)
    目录一、介绍二、程序设计main.c文件gate_guard.h文件gate_guard.c文件三、实验效果 四、资料获取项目分享一、介绍        MC-38常闭式门磁开关是作为IO开关输入数字信号的,原理是合在一起信号是导通的,配合有线主机使用不能单独使用。适用于非铁质(如木......
  • RFID射频模块(MFRC522 STM32)
    目录一、介绍二、传感器原理1.原理图2.引脚描述3.工作原理介绍三、程序设计main.c文件MFRC522.h文件MFRC522.c文件四、实验效果 五、资料获取项目分享一、介绍        RC522RFID射频模块是一款广泛应用于非接触式RFID系统中的核心组件,由NXP(前身为Phil......
  • stm32 时钟
    1、时钟从时钟源的角度,分为两类外部时钟(E)和内部时钟(I)。从时钟速率的角度,分为两类高速时钟(HS)和低速时钟(LS)。而把它们组合起来就有四种时钟:HSE、HIS、LSE、LSI, LSE一般用于RTC和看门狗,LSE接引脚OSC32_IN、OSC32_OUT,  接32.768kHzHSE一般用于主频,接引脚OSC_OUT、......
  • STM32No target connected解决办法
    stm32使用stlink下载程序报错目标未连接解决办法之一一.产生原因二.解决办法一.产生原因使用stlink下载程序时遇到Notargetconnected报错,产生这个有很多原因,我这里的原因是由于这是我自己画的板子有问题。请看pcb我的下载电路直接接到了铺铜上,当仅使用stlink供......