进阶教程3 Arduino软串口与蓝牙通信 您所在的位置:网站首页 串口监听工具listen 进阶教程3 Arduino软串口与蓝牙通信

进阶教程3 Arduino软串口与蓝牙通信

2023-04-25 01:47| 来源: 网络整理| 查看: 265

本专栏内容经修订后,已在豆瓣阅读集结成书出版:

https://read.douban.com/ebook/106875966/

我是潘,曾经是个工程师。这是为 http://Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程。本课将介绍软件串口和蓝牙通信。有任何疑问请在评论区提出,我会逐一回答。

串口是应用最广泛的通信协议,可以实现高速传输(相对单片机来说),而且只需要两个线 RX 和 TX 即可。但串口也有缺点,每个串口只能实现一组通信, 而 Arduino Uno 只提供了一个串口(D0 – RX、D1 -TX),并且是和 USB 转换模块共用的。换句话说,如果 USB 端在使用, 就无法再接其他串口设备,比如,我们这次要介绍的 CC2541 蓝牙模块。

幸好,Arduino 官方提供了软件串口的库,可以将任意两个数字端口,模拟成串口。软件串口库不需要下载,IDE 已经集成,打开“菜单 -> 项目 -> 加载库 -> SoftwareSerial “即可加载。

使用软件串口前,先介绍一下 HM10 蓝牙模块。该模块采用德州仪器 CC2541 蓝牙4.0芯片,主从一体机,采用串口通信。另外,不建议使用老旧的HC5、HC6等,因为此类模块基于老旧的蓝牙2.1协议,耗电较大、很多新特性都不支持,而且也不便宜。

这个模块需要转焊,但也可以购买已经带底座的模块,更省事。我们只要4跟连接线:3.3V 连接 3.3V(最高不超过7V);GND 连接 GND;TX 连接 D8;RX 连接 D9;

往Arduino 写入程序:

/* 作者:Ardui.co 效果:手机连接蓝牙通信 版本:1.0 更新时间:2017年3月15日 */ #include //加载软件串口库 SoftwareSerial BT(8, 9); //新建对象,设置软件串口端口,RX为D8,TX为D9 char val; //存储接收的变量 void setup() { Serial.begin(9600); //与PC串口连接 Serial.println("BT is ready!"); BT.begin(9600); //设置波特率 } void loop() { //如果串口接收到数据,输出到蓝牙串口(手机) if (Serial.available()) { val = Serial.read(); BT.print(val); } //如果接收到蓝牙模块的数据,输出到屏幕 if (BT.available()) { val = BT.read(); Serial.println(val); } }

这程序在理解上毫无难度。

此时,我们还需要在手机上下载一个蓝牙串口控制器,Arduino 设备推荐 ”BLE蓝牙串口“,iOS 推荐LightBlue,均为免费软件。最后打开PC 串口监视器和手机的蓝牙串口APP,就可以双向通信了。

顺便介绍一下 iOS 上 LightBlue 的使用。连接蓝牙模块后,我们把界面拉到最底部,找到UUID的选项点击进入,打开”Listen for nobiantifications“,此时才能监听蓝牙的串口数据。同时,要把右上角的Hex(十六进制),改为String(字符串)。

现在要结合 DHT11 温湿度传感器,在手机上显示实时温度。同时,不用软件串口了,让蓝牙模块直接使用 Uno 的硬件串口(D0、D1即硬件串口):

/* 作者:Ardui.Co 效果:手机蓝牙显示温湿度 版本:1.0 更新时间:2017年3月14日 */ #include "DHT.h" //加载DHT11的库 #define DHTTYPE DHT11 // 定义传感器类似 DHT11 #define DHTPIN 2 //宏定义DHT数据接口,编译时DHTPIN会替换成2 DHT dht(DHTPIN, DHTTYPE);//声明 dht 函数 void setup() { Serial.begin(9600); dht.begin(); //启动传感器 } void loop() { delay(1000); //采样延时,每次抓取数据时间间隔 1~2秒钟 float h = dht.readHumidity();//读取湿度 float t = dht.readTemperature();//读取摄氏度 if (isnan(h) || isnan(t) ) { Serial.println("Failed to read from DHT sensor!"); return; } //检查抓取是否成功 Serial.print(h); Serial.print(" %\t"); Serial.print(t); Serial.print(" *C "); }

这其实就是第9课的程序简化版。

程序上传完毕后,拔掉USB,否则会产生冲突。蓝牙模块的 TX 接 D0,RX 接 D1,并使用 Uno 的外界电源口供电,打开手机蓝牙串口,看到湿度温度在刷新:

利用蓝牙通信,我们终于可以脱离PC大屏幕了,手机就能实现人机互动。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有