我要做一个硬件, esp32 和 stm32 该怎么选,请教下 V 社的大佬们!

240 天前
 taxze

V 社的各位大佬,小弟来咨询下,我要做一个硬件,esp32 和 stm32 该怎么选。

产品大致功能: 1.控制马达(马达有几根线,控制马达的电压即可控制马达的转速)。 2.检测硬件的温度。 3.需要接显示屏显示一些东西。 4.检测硬件是否被移动。 5.硬件上只带有一个开关机的物理按键,基本上所有的控制功能(控制马达的转速...)、硬件的数据都要通过蓝牙传给 app 。

其他需求: 目前对硬件知识了解不多,属于小白,但是需要在 3 个月左右的时间内和 app 联调好,做出一个基本的样品,需要考虑学习成本!

本人是做 app 开发的,对硬件不太了解,谢谢各位大佬!!!

1290 次点击
所在节点    问与答
9 条回复
FranzKafka95
240 天前
物联网的场景推荐 ESP32
vileer
240 天前
你要蓝牙那肯定是 esp32 啊,低端的 stm32 没有蓝牙,你说的这些需求 esp32 都难实现
liqinliqin
240 天前
liqinliqin
240 天前
#include <Arduino.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

// 定义 BLE 服务、特征和 UUID
BLEServer* pServer;
BLEService* pService;
BLECharacteristic* pCharacteristic;

// 定义马达控制参数
const int motorPin = 12; // 马达控制引脚
int motorSpeed = 0; // 马达转速

// 定义温度传感器引脚
const int tempSensorPin = 34; // 温度传感器引脚

// 定义运动检测参数
const int motionSensorPin = 35; // 运动传感器引脚
int motionDetected = 0; // 运动检测结果

// 定义开关机按键参数
const int powerButtonPin = 27; // 开关机按键引脚
bool powerState = false; // 开关机状态

// 定义 BLE 特征的 UUID
#define CHARACTERISTIC_UUID "1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p"

// 回调函数,当有 BLE 中心设备连接或断开连接时调用
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
Serial.println("BLE 设备已连接");
};

void onDisconnect(BLEServer* pServer) {
Serial.println("BLE 设备已断开连接");
}
};

// 初始化 BLE 服务
void initBLE() {
BLEDevice::init("ESP32_BLE_Server");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());

pService = pServer->createService(BLEUUID((uint16_t)0x180F));
pCharacteristic = pService->createCharacteristic(
BLEUUID((uint16_t)0x2A19),
BLECharacteristic::PROPERTY_READ
);

pCharacteristic->setValue(0); // 初始化特征值为 0
pService->start();
BLEAdvertising* pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}

// 初始化硬件
void setup() {
Serial.begin(115200);
initBLE();
pinMode(motorPin, OUTPUT);
pinMode(tempSensorPin, INPUT);
pinMode(motionSensorPin, INPUT);
pinMode(powerButtonPin, INPUT_PULLUP);
}

// 主循环
void loop() {
// 读取温度传感器数据
float temperature = analogRead(tempSensorPin) * 3.3 / 4095 * 100; // 假设温度传感器为模拟传感器,实际情况请根据传感器类型调整

// 检测运动传感器
motionDetected = digitalRead(motionSensorPin);

// 检测开关机按键状态
if (digitalRead(powerButtonPin) == LOW) {
powerState = !powerState; // 切换开关机状态
}

// 发送数据到 BLE 中心设备
pCharacteristic->setValue(temperature); // 将温度值写入 BLE 特征
pCharacteristic->notify();

delay(1000); // 等待 1 秒钟
}
liqinliqin
240 天前
这段代码实现了以下功能:

控制马达的转速,可以通过 motorSpeed 变量设置马达的转速。
检测温度传感器的数据,通过 tempSensorPin 引脚读取温度传感器的值。
通过 BLE 服务将温度数据发送给 BLE 中心设备。
检测运动传感器的状态,通过 motionSensorPin 引脚读取运动传感器的状态。
监测开关机按键状态,通过 powerButtonPin 引脚检测开关机按键的状态,并通过 BLE 服务将开关机状态发送给 BLE 中心设备。
liqinliqin
240 天前
APP+硬件原型周期一上午可以完成
taxze
240 天前
@liqinliqin nb 啊大哥
leon2023
240 天前
既然要蓝牙,那必须 esp32 了,主要是 flash 超大,一般都是 4MB,不像 stm32,一般几十 K 到 1,2 百 k 。再加上 esp32 集成 wifi 和蓝牙,stm32 要外接,esp32 如果用 arduino 开发,有 many many 的现成库可以用,上手容易
amwyyyy
240 天前
esp32 好上手

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX