1. Haas python 轻应用 Esp32开发板 温度传感器使用

这篇博客是针对初学者的ESP32开发板和SHT3X温湿度传感器的使用教程。作者介绍了如何从零开始设置环境,包括连接硬件、编写Python代码、配置board.json文件以及部署和运行。虽然在实际运行中遇到了问题,但最终通过CMD成功执行了程序并获取了温湿度数据。
部署运行你感兴趣的模型镜像

Haas python 轻应用 Esp32开发板 温度传感器使用

注:因为我是不会python和开发板的等知识的(全是零基础),所以我就是纯粹的CV大法,这只是我个人初级入门的记录。

1.入门教程

haas 官网指导hellowrold教程
https://haas.iot.aliyun.com/haasapi/index.html#/Python/docs/zh-CN/startup/ESP32_startup

2.入门准备

1. Esp32 开发板(乐鑫 ESP32_DevKitC)

在这里插入图片描述

2.温湿度传感器(SHT3X温湿度传感器)

在这里插入图片描述

3.杜邦线4根

3. 接线

在这里插入图片描述
在这里插入图片描述

4. 用VScode的HaaS Studio新建一个hellowrold工程。

4.1 引入温湿度驱动

参考网站https://haas.iot.aliyun.com/solution/detail/hardware?versionId=800CD7F0F2F57FF800000002&dataId=800CD7F0F2F57FF8&s=

新建一个sht3x.py文件
内容如下:

在这里插入图片描述

"""
Copyright (C) 2015-2021 Alibaba Group Holding Limited

    MicroPython's driver for CHT8305

    Author: HaaS
    Date:   2021/09/14
"""

from micropython import const
import utime
from driver import I2C

'''
# sht3x commands definations
# read serial number:                            CMD_READ_SERIALNBR  0x3780
# read status register:                          CMD_READ_STATUS     0xF32D
# clear status register:                         CMD_CLEAR_STATUS    0x3041
# enabled heater:                                CMD_HEATER_ENABLE   0x306D
# disable heater:                                CMD_HEATER_DISABLE  0x3066
# soft reset:                                    CMD_SOFT_RESET      0x30A2
# accelerated response time:                     CMD_ART             0x2B32
# break, stop periodic data acquisition mode:    CMD_BREAK           0x3093
# measurement: polling, high repeatability:      CMD_MEAS_POLLING_H  0x2400
# measurement: polling, medium repeatability:    CMD_MEAS_POLLING_M  0x240B
# measurement: polling, low repeatability:       CMD_MEAS_POLLING_L  0x2416
'''

class SHT3X(object):

    # i2cDev should be an I2C object and it should be opened before __init__ is called
    def __init__(self, i2cDev):
        self._i2cDev = None
        if not isinstance(i2cDev, I2C):
            raise ValueError("parameter is not an I2C object")

        # make AHB21B's internal object points to _i2cDev
        self._i2cDev = i2cDev
        self.start()

    def start(self):
        # make sure AHB21B's internal object is valid before I2C operation
        if self._i2cDev is None:
            raise ValueError("invalid I2C object")

        # send clear status register command - 0x3041 - CMD_CLEAR_STATUS
        cmd = bytearray(2)
        cmd[0] = 0x30
        cmd[1] = 0x41
        self._i2cDev.write(cmd)

        # wait for 20ms
        utime.sleep_ms(20)

        return 0

    def getTempHumidity(self):
        if self._i2cDev is None:
            raise ValueError("invalid I2C object")

        tempHumidity = [-1, 2]

        # start measurement: polling, medium repeatability - 0x240B - CMD_MEAS_POLLING_M
        # if you want to adjust measure repeatability, you can send the following commands:
        # high repeatability: 0x2400 - CMD_MEAS_POLLING_H
        # low repeatability: 0x2416  - CMD_MEAS_POLLING_L
        cmd = bytearray(2)
        cmd[0] = 0x24
        cmd[1] = 0x0b
        self._i2cDev.write(cmd)

        # must wait for a little before the measurement finished
        utime.sleep_ms(20)

        dataBuffer = bytearray(6)
        # read the measurement result
        self._i2cDev.read(dataBuffer)

        # print(dataBuffer)
        # calculate real temperature and humidity according to SHT3X-DIS' data sheet
        temp = (dataBuffer[0]<<8) | dataBuffer[1]
        humi = (dataBuffer[3]<<8) | dataBuffer[4]

        tempHumidity[1] = humi * 0.0015259022
        tempHumidity[0] = -45.0 + (temp) * 175.0 / (0xFFFF - 1)

        return tempHumidity

    def getTemperature(self):
        data = self.getTempHumidity()
        return data[0]

    def getHumidity(self):
        data = self.getTempHumidity()
        return data[1]

    def stop(self):

        if self._i2cDev is None:
            raise ValueError("invalid I2C object")

        # stop periodic data acquisition mode
        cmd = bytearray(3)
        cmd[0] = 0x30
        cmd[1] = 0x93
        self._i2cDev.write(cmd)
        # wait for a little while
        utime.sleep_ms(20)

        self._i2cDev = None
        return 0

    def __del__(self):
        print('sht3x __del__')

if __name__ == "__main__":
    '''
    The below i2c configuration is needed in your board.json.
    "sht3x": {
        "type": "I2C",
        "port": 1,
        "addrWidth": 7,
        "freq": 400000,
        "mode": "master",
        "devAddr": 68
    },
    '''
    print("Testing sht3x ...")

    i2cDev = I2C()
    i2cDev.open("sht3x")

    sht3xDev = SHT3X(i2cDev)

    '''
    # future usage:
    i2cDev = I2C("sht3x")
    sht3xDev = sht3x.SHT3X(i2cDev)
    '''

    temperature = sht3xDev.getTemperature()
    print("The temperature is: %f" % temperature)

    humidity = sht3xDev.getHumidity()
    print("The humidity is: %f" % humidity)

    print("Test sht3x done!")


4.2 修改board.json
{
  "name": "board-name",
  "version": "1.0.0",
  "io": {
    "sht3x": {
      "type": "I2C",
      "port": 0,
      "addrWidth": 7,
      "freq": 400000,
      "mode": "master",
      "devAddr": 68
    }
  },
  "debugLevel": "ERROR",
  "repl": "disable"
}
4.3 写main.py
# Python代码
import utime                         # 延时API所在组件
from driver import I2C               # 驱动库
import sht3x                         # SHT3X-DIS温湿度传感器驱动库
i2cObj = I2C()
i2cObj.open("sht3x")                 # 按照board.json中名为"sht3x"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象
print("sht3x inited!")
humitureDev = sht3x.SHT3X(i2cObj)    # 初始化SHT3X-DIS传感器
# 通过温湿度传感器读取温湿度信息
def get_temp_humi():
    temperature = humitureDev.getTemperature()         # 获取温度测量结果
    humidity = humitureDev.getHumidity()               # 获取相对湿度测量结果
    '''
    # 如果需要同时获取温湿度信息,可以呼叫getTempHumidity,实例代码如下:
    humniture = humitureDev.getTempHumidity()          # 获取温湿度传感器测量到的温湿度值
    temperature = humniture[0]                         # get_temp_humidity返回的字典中的第一个值为温度值
    humidity = humniture[1]                            # get_temp_humidity返回的字典中的第二个值为相对湿度值
    '''
    print("The temperature is: %.1f" % temperature)
    print("The humidity is: %d" % humidity)
    return temperature, humidity                        # 返回读取到的温度值和相对湿度值
if __name__ == '__main__':
    while True:
        data = get_temp_humi()                          # 读取温度信息和相对湿度信息
        utime.sleep(1)                                  # 每隔1秒钟进行一次温湿度信息测量和打印
    i2cObj.close()                                      # 关闭I2C设备对象
4.4 部署运行

在这里插入图片描述
在这里插入图片描述

(可能我的环境部署有问题,我的是运行报错的,不知道怎么解决,所以我是把命令复制到cmd窗口运行的)

cmd 部署运行成功
在这里插入图片描述

4.5 查看效果

可以直接用vscode下面菜单栏的串口查看(我这里有问题,查看不了),我用putty查看
在这里插入图片描述
在这里插入图片描述

下面是我真实的接线图
在这里插入图片描述

结束(大功告成)

第一次成功了,算是入门的一小步了。
加油,努力!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户解决如何使用Python控制ESP32蓝牙小车的问题。首先,我得仔细阅读用户的问题和相关引用内容,确保理解他们的需求。 用户提到了三个引用,其中引用[1]是关于ESP32和MicroPython通过WiFi控制小车的例子,引用[2]详细描述了使用ESP32和WiFi Web界面控制小车的项目,而引用[3]则涉及STM32和蓝牙遥控小车,特别是通过摇杆控制,并提到Haas506作为主机扫描蓝牙设备。用户的目标是使用Python控制ESP32蓝牙小车,所以需要结合这些信息。 首先,我需要明确ESP32的蓝牙功能。ESP32支持蓝牙经典和BLE(低功耗蓝牙)。用户想用Python,所以可能需要一个可以在PC或树莓派等设备上运行的Python脚本,通过蓝牙与ESP32通信。 根据引用[3],Haas506作为主机扫描蓝牙设备并连接,这说明ESP32可能需要设置为从机模式,等待连接。同时,用户需要将控制指令发送到ESP32,比如通过串口蓝牙模块接收数据,然后ESP32解析指令控制电机。 接下来,步骤应该包括硬件准备、ESP32固件开发、Python蓝牙通信以及控制协议设计。硬件方面,需要ESP32开发板、电机驱动模块(如L298N)、电源等。软件方面,ESP32需要编写蓝牙接收和处理代码,可能使用MicroPython或Arduino框架。Python端则需要使用蓝牙库,如PyBluez或bleak(对于BLE)。 需要注意的是,PyBluez在Windows上可能有限制,而bleak支持BLE,但需要确认ESP32的蓝牙模式。如果ESP32使用蓝牙经典(SPP),可能需要不同的库。此外,引用[3]中的ADC数据转换和指令格式(如X10Y-5*)提示控制指令需要特定的格式,可能包括方向和速度值,以*结尾作为分隔符。 可能的挑战包括蓝牙连接稳定性、数据解析的正确性以及电机控制的同步。需要确保ESP32能够持续监听蓝牙数据,并正确驱动电机。此外,Python脚本需要能够发送正确的指令格式,并处理可能的连接问题。 最后,测试部分应该包括蓝牙配对、发送指令测试小车的运动响应,以及调整速度和方向参数。可能还需要考虑用户界面,比如使用Python的Tkinter创建简单的控制界面,或者命令行控制。 总结步骤:配置ESP32的蓝牙通信,编写MicroPython代码接收和处理指令,在Python使用蓝牙库发送指令,设计控制协议,并测试整个系统。</think>### 分步实现Python控制ESP32蓝牙小车的方案 #### 一、硬件准备与配置 1. **ESP32开发板** 需支持蓝牙通信,建议使用带有蓝牙功能的版本(如ESP32-WROOM-32)。 2. **电机驱动模块** 如L298N或TB6612,用于控制小车的直流电机[^2]。 3. **电源系统** - 独立电源为电机供电(如9V电池) - USB电源为ESP32供电(可用移动电源) 4. **蓝牙模块兼容性** ESP32内置蓝牙协议栈,无需额外模块,但需确保固件支持蓝牙通信。 --- #### 二、ESP32固件开发(MicroPython环境) 1. **蓝牙从机模式配置** 将ESP32设置为蓝牙串口(SPP)从机,等待Python端连接。 ```python from machine import UART import bluetooth ble = bluetooth.BLE() uart = UART(2, baudrate=9600, tx=17, rx=16) # 配置硬件串口 def on_bt_rx(data): uart.write(data) # 将蓝牙数据转发到串口 ble.irq(handler=on_bt_rx) ``` 2. **电机控制逻辑** 通过PWM信号控制电机速度和方向(以L298N为例): ```python from machine import Pin, PWM # 定义电机引脚 in1 = Pin(12, Pin.OUT) in2 = Pin(14, Pin.OUT) ena = PWM(Pin(27), freq=1000) def set_motor(speed, direction): if direction == 'forward': in1.value(1) in2.value(0) elif direction == 'backward': in1.value(0) in2.value(1) ena.duty(speed) # 速度范围0-1023 ``` --- #### 三、Python端蓝牙控制程序 1. **安装依赖库** 使用`pybluez`或`bleak`库(根据蓝牙协议选择): ```bash pip install pybluez # 蓝牙经典协议(SPP) pip install bleak # BLE协议 ``` 2. **搜索并连接ESP32** ```python import bluetooth target_name = "ESP32_CAR" # ESP32蓝牙名称 target_address = None nearby_devices = bluetooth.discover_devices() for addr in nearby_devices: if target_name == bluetooth.lookup_name(addr): target_address = addr break sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) sock.connect((target_address, 1)) # 通道1为SPP默认通道 ``` 3. **发送控制指令** 按约定格式发送数据(参考引用[3]的摇杆指令格式): ```python def send_command(x, y): # 将坐标转换为字符串,例如X100Y-50* command = f"X{x}Y{y}*" sock.send(command.encode()) # 示例:前进速度为80%,方向偏右 send_command(80, 10) ``` --- #### 四、控制协议设计(关键步骤) 1. **数据格式** 使用类似`X[value]Y[value]*`的结构,例如: - `X100Y0*`表示全速前进 - `X-50Y30*`表示左转后退 2. **ESP32数据解析** ```python buffer = "" while True: data = uart.read().decode() buffer += data if '*' in buffer: command, buffer = buffer.split('*', 1) x_str, y_str = command[1:].split('Y') x = int(x_str) y = int(y_str) # 调用电机控制函数 ``` --- #### 五、测试与优化 1. **基础功能验证** - 发送`X100Y0*`测试前进 - 发送`X0Y0*`测试停止 2. **性能优化方向** - 增加校验位(如CRC)防止数据错误 - 添加心跳包维持连接稳定性 3. **扩展功能** - 通过Python GUI库(如Tkinter)创建控制界面 - 实现摄像头图传(需额外硬件支持) --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值