美文网首页
esp32蓝牙通信

esp32蓝牙通信

作者: 张胜东 | 来源:发表于2021-03-20 01:17 被阅读0次

最近想做一个发热垫,可以用手机控制。

一开始思考过用wifi接入米家进行控制,这样还能使用语音助手。但后来仔细思索一番,发现使用场景不对。如果使用wifi连接,那意味着只能在室内使用了。

所以,最后还是决定直接使用蓝牙连接。

硬件选型

虽然选择了蓝牙连接,但为了以后扩展wifi方便,所以硬件选用了esp32,同时有wifi和蓝牙连接的功能,代码又兼容arduino,使用非常方便。

蓝牙连接方式

  1. 初步设想是把硬件的mac地址生成二维码,手机软件扫描二维码获取mac地址,进行连接及发送温度设置等指令。
  2. 后来发现,貌似可以直接用设备名进行蓝牙连接,如此一来便可以把所有的硬件设备都设置为相同的设备名,又可以省去二维码,着实不错。
  3. 最后是在查资料时看到一种蓝牙广播的方式,不过尚未来及做实验,日后有机会倒可以试试。

温控方式

使用温敏电阻即可读取温度。

  1. 最简单的温控可以是直接用继电器开关进行控制。设置温度的上下区间,加热到上区间停止,低于下区间则重启加热。
  2. 高阶一点的是用pwm的方式调整发热电阻的功率,离目标温度越接近则功率越小,如此即可实现平滑温度曲线。甚至于再不行,还可上pid闭环控制算法,叠加上之前的误差,实时调整。
file file file

手机软件

由于我不会做安卓软件,现在只是使用一款“蓝牙串口”的app直接发送指令,控制硬件。

以后还是要学一下安卓,做一套架子出来。

esp32程序

//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Evandro Copercini - 2018
//
//This example creates a bridge between Serial and Classical Bluetooth (SPP)
//and also demonstrate that SerialBT have the same functionalities of a normal Serial

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;
char START_FLAG = '$';
char END_FLAG = '#';
int TEMPERATURE_MIN = 0;
int TEMPERATURE_MAX = 50;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
}

void SerialBT_sendMsg(String msg) {
  int i = 0;
  for (i = 0; i < msg.length(); i++) {
    SerialBT.write(msg[i]);
  }
}

int NONE = 0;
int START = 1;
int pre_status = NONE;

int num = 0;
void loop() {
  if (SerialBT.available()) {
    char msg_char = SerialBT.read();
    if (msg_char == START_FLAG) {
      num = 0;
      pre_status = START;
    } else if (msg_char == END_FLAG && pre_status == START) {
      if (num >= TEMPERATURE_MIN && num <= TEMPERATURE_MAX) {
        String msg = String("set temperature to " + String(num) + "\n");
        SerialBT_sendMsg(msg);
      }
      num = 0;
      pre_status = NONE;
    } else if (isDigit(msg_char) && pre_status == START) {
      num = num * 10 + (msg_char - '0');
    } else {
      num = 0;
      pre_status = NONE;![file](https://img.haomeiwen.com/i6302584/ca8f0be6cae98db2.png)
    }

    // SerialBT_sendMsg(String(String(msg_char) + "\n"));
  }

  
    

  delay(20);
}

相关文章

  • esp32蓝牙通信

    最近想做一个发热垫,可以用手机控制。 一开始思考过用wifi接入米家进行控制,这样还能使用语音助手。但后来仔细思索...

  • 乐鑫科技ESP32开发应用笔记--总目录

    ESP32自带Wifi和蓝牙(经典蓝牙+低功耗蓝牙),有完备、开源的SDK,是目前国内IOT物联网应用开发的佼佼者...

  • 学习笔记_基于Kotlin的蓝牙通信工具类

    使用Kotlin简单实现蓝牙通信 蓝牙通信步骤 获取蓝牙适配器 检查蓝牙是否可用 打开/关闭蓝牙 搜索附近可见蓝牙...

  • Android蓝牙通信

    基础准备 蓝牙通信概念 通常意义的蓝牙通信的含义就是Client通过蓝牙对接后进行数据通信,这里面需要注意的是蓝牙...

  • Android 经典蓝牙开发(二)

    本文章经典蓝牙开发目录: 1、权限申请2、开启蓝牙3、扫描蓝牙4、配对蓝牙5、连接蓝牙6、通信(实现双向通信)(我...

  • Android 低功耗(BLE)蓝牙(三)

    本文章经典蓝牙开发目录: 1、权限申请2、开启蓝牙3、扫描蓝牙4、连接蓝牙5、通信(实现双向通信)(这个是公司的设...

  • 基于stm32的多功能时钟10——数据采集与蓝牙控制

    嘿,我的小可爱们! 在《蓝牙串口通信》这一章中,小编带着大家编写了蓝牙串口通信程序,测试了蓝牙通信正常。由于我后来...

  • Android实践 -- Android蓝牙设置连接

    蓝牙开发相关 使用Android Bluetooth APIs将设备通过蓝牙连接并通信,设置蓝牙,查找蓝牙设备,配...

  • 蓝牙通信

    BLE中心模式流程-coding BLE中心模式流程 1.建立中心角色 2.扫描外设(Discover Perip...

  • 蓝牙通信

    在iOS开发中,实现蓝牙通信有两种方式,一种是使用传统的GameKit.framework,另一种就是使用在iOS...

网友评论

      本文标题:esp32蓝牙通信

      本文链接:https://www.haomeiwen.com/subject/xcsicltx.html