V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
taxze
V2EX  ›  问与答

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

  •  
  •   taxze · 14 天前 · 593 次点击

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

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

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

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

    9 条回复    2024-04-29 09:34:44 +08:00
    FranzKafka95
        1
    FranzKafka95  
       14 天前 via Android
    物联网的场景推荐 ESP32
    vileer
        2
    vileer  
       14 天前 via iPhone
    你要蓝牙那肯定是 esp32 啊,低端的 stm32 没有蓝牙,你说的这些需求 esp32 都难实现
    liqinliqin
        3
    liqinliqin  
       14 天前
    liqinliqin
        4
    liqinliqin  
       14 天前
    #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
        5
    liqinliqin  
       14 天前
    这段代码实现了以下功能:

    控制马达的转速,可以通过 motorSpeed 变量设置马达的转速。
    检测温度传感器的数据,通过 tempSensorPin 引脚读取温度传感器的值。
    通过 BLE 服务将温度数据发送给 BLE 中心设备。
    检测运动传感器的状态,通过 motionSensorPin 引脚读取运动传感器的状态。
    监测开关机按键状态,通过 powerButtonPin 引脚检测开关机按键的状态,并通过 BLE 服务将开关机状态发送给 BLE 中心设备。
    liqinliqin
        6
    liqinliqin  
       14 天前
    APP+硬件原型周期一上午可以完成
    taxze
        7
    taxze  
    OP
       14 天前
    @liqinliqin nb 啊大哥
    leon2023
        8
    leon2023  
       14 天前
    既然要蓝牙,那必须 esp32 了,主要是 flash 超大,一般都是 4MB,不像 stm32,一般几十 K 到 1,2 百 k 。再加上 esp32 集成 wifi 和蓝牙,stm32 要外接,esp32 如果用 arduino 开发,有 many many 的现成库可以用,上手容易
    amwyyyy
        9
    amwyyyy  
       13 天前
    esp32 好上手
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   957 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:05 · PVG 04:05 · LAX 13:05 · JFK 16:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.