原文链接:https://dsx2016.com/?p=1505

公众号:大师兄2016

前言

前面的arduino操作都是建立在usb串口通信上的,然而有线的操作不仅不方便,还受限设备数量,数据传输速率等其他因素影响.

无线的通信方式更加方便快捷,连接数量和通信方式更是提升好几个量级,从距离上就占据了优势

  • 传统蓝牙有效距离约为10米,蓝牙5.0最远可为150米

  • WIFI的有效距离一般为50-100米

数据线的有效距离则完全取决于其长度,一般而言,要想达到1米以上的效果,不仅贵而且还不太现实.

考虑到学习难度和通信方式(蓝牙和wifi的优缺点对比),优先推荐蓝牙模块的使用.

蓝牙模块

本文使用的模块为JDY-16 BLE

线路图如图所示

参数备注

Arduino UNO JDY16 蓝牙模块
VCC +5V
GND GND
3 TXD
2 RXD

arduino蓝牙代码

保存,编译并上传到arduino,并打开编辑器的串口监视器

#include <SoftwareSerial.h>
#define Software_TX 2
#define Software_RX 3
​
byte read_dat, jdy_dat;
SoftwareSerial BLE_JDY_16(Software_RX, Software_TX);//
void setup(){Serial.begin(9600);BLE_JDY_16.begin(9600);Serial.println("Ble Test");}
​
void loop(){if (BLE_JDY_16.available()) {jdy_dat = BLE_JDY_16.read();delay(2);Serial.write(jdy_dat);}if (Serial.available() > 0)  {read_dat = Serial.read();delay(2);BLE_JDY_16.write(read_dat);}}

arduino连接上蓝牙模块后,指示灯闪烁

安卓手机蓝牙

android手机安装蓝牙测试app

apk下载地址

https://httpsimg.dsx2020.com/BLETestToos.apk

手机上先开启蓝牙

然后打开蓝牙调试app

点击上图第三图的第一个列表(或者其他随意)->点击写入->输入文字->点击发送

arduino的串口监视器就会收到并打印字符

同时arduino也可以通过蓝牙发送消息

在串口监视器的输入框输入字符,点击发送

接着查看蓝牙调试app的界面

arduino在发送的时候,确保蓝牙是连接的,并停留在下图界面

收到的消息会实时显示在红框的区域,以下为显示的内容

至此,安卓手机通过蓝牙和arduino通信就完成了

web蓝牙

本文使用的为Web Bluetooth API

参考地址https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API

兼容性

操作方式

  1. 确保当前笔记本或者台式主机有蓝牙功能,没有的需要先买一个usb蓝牙

  2. 按兼容性使用对应支持蓝牙api的浏览器,建议使用最新版chrome浏览器

  3. 将本文web蓝牙代码写入本地html文件,按蓝牙调试app中截图说明的数据,替换代码中的蓝牙参数,然后使用浏览器打开

  4. 点击文字bl,开启蓝牙:蓝牙功能的使用只能是通过人为操作才生效,如果直接在js中用方法自动调用,会报错.

上述操作后,如果蓝牙配对成功,会自动发送给arduino字符~大师兄,并打印在arduino串口监视器

web蓝牙html代码

具体细节参考代码注释

<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>BL</title></head><body><!-- 只有通过真实点击才能连接蓝牙 --><div onclick="blList()">bl</div></body><script>// 定义连接蓝牙方法async function blList() {navigator.bluetooth.requestDevice({// 蓝牙名称前缀filters: [{ namePrefix: "JDY" }],// 蓝牙uuidoptionalServices: [0xffe0],}).then(async (device) => {console.log("Name: " + device.name, device);// 连接设备let server = await device.gatt.connect();console.log(`server`, server);// 获取蓝牙uuid相关内容let service = await server.getPrimaryService(0xffe0);console.log(`service`, service);// 获取可以读写字符流的服务let characteristic = await service.getCharacteristic(0xffe1);// 写入字节(括号中的方法为把字符串转为字符流,传输给蓝牙)characteristic.writeValue(new Uint8Array(new TextEncoder("utf-8").encode("大师兄")));}).catch(function (error) {// 监听错误console.log("Something went wrong. " + error);});}// blList();</script>
</html>
​

至此web蓝牙和arduino的通信完成

总结

本文描述了

  1. arduino蓝牙模块的线路图连接方式

  2. arduino蓝牙调试的代码和安卓蓝牙调试apk下载

  3. arduino和安卓手机来回通信演示

  4. web蓝牙和arduino通信演示

第4点的操作是直接通过web界面来控制arduino功能的前提,如控制LED灯开关灯

前面演示的usb串口显示实时温度仪表盘也可以通过蓝牙通信来实现,而且更为方便(不需要开启flask服务器和socket,只需要蓝牙通信即可)

END.

使用蓝牙测试app和Web Bluetooth API(web蓝牙)连接arduino蓝牙模块并通信相关推荐

  1. 利用 Web Share API 将网页分享到 App(上)

    2013年加入去哪儿网技术团队,目前在大住宿事业部,技术委员会委员,大前端负责人.个人对移动端技术.工程化有浓厚兴趣. 随着移动互联网的发展,用户流量逐渐从 PC 上迁移到了手机上,为了更好的满足移动 ...

  2. JavaScript基础知识总结 14:学习JavaScript中的File API、Streams API、Web Cryptography API

    目录 一.Atomics和SharedArrayBuffer 二.原子操作基础 1.算术及位操作方法 2.原子读和写 3.原子交换 4.原子Futex操作与加锁 三.跨上下文消息 四.Encoding ...

  3. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)...

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是coo ...

  4. HTML5 Web Storage API

    Web Storage API Web Storage 是以键值对(key-value)的形式存储数据,要存储的数据需要一个名字作为键,然后就可以使用这个键来读取它的值.键是一个字符串.值可以是 Ja ...

  5. 【Web】1326- 深入浅出 Web Audio API

    前言 2011被提出,同年草案被Google Chrome和Mozilla Firefox实现 在此之前Web音频较为原始,无法应付较为复杂的应用场景,例如Web游戏或互动应用 旨在提供全套Web音频 ...

  6. 【实战】使用 Web Animations API 实现一个精确计时的时钟

    在 JavaScript 中,当事情准时发生时,很自然地会想到使用计时器函数. 但是,当某件事由于其他事情依赖于它而在准确的时刻发生时,你很快就会发现计时器会存在一个不准时的问题.而本文所要介绍的 W ...

  7. 低功耗蓝牙开发权威指南 pdf_新手入门神器!物联网低功耗蓝牙开发板,免费申请...

    特性: 支持Arduino IDE编程 支持BLE 4.1主从机切换 支持蓝牙串口数据透传 支持蓝牙点对点无线编程 支持蓝牙4.1多设备级联(最多4个) 支持Arduino蓝牙库(支持多蓝牙连接使用) ...

  8. 发adb强制打开关闭webview应用,关闭后打开web显示白屏,默认关闭快霸。移除快霸。工模测试,蓝牙测试,前后摄像头测试没有成功失败按钮。

    发adb强制打开关闭webview应用,关闭后打开web显示白屏,默认关闭快霸.移除快霸: 这个就是预装了个快霸这个应用,设置里面找到这个应用信息,打开它,它是默认开启的,但不会在launcher上显 ...

  9. ESP32-C3 学习测试 蓝牙 篇(二、蓝牙调试APP、开发板手机连接初体验)

    等了好久终于等到今天,盼了好久终于把蓝牙测试 = =! ESP32-C3 专栏好久没更新了,这次抽点时间把蓝牙的准备工作做完. 目录 前言 1.蓝牙手机调试工具 2.ESP-IDF中示例的选择 3.E ...

最新文章

  1. 用C++ 和OpenCV 实现视频目标检测(YOLOv4模型)
  2. Silverlight 参考:KeyEventArgs.Handled 属性
  3. DirectShow学习
  4. linux centos 6.5压缩文件,CentOS 6.10 解压 rar压缩包
  5. 女性开车5大安全驾车好习惯 为您支招
  6. bool与string互转
  7. 【Day15】介绍下 promise 的特性、优缺点,内部是如何实现的,动手实现 Promise
  8. 第四篇 做一个用户登录之后查看学员信息的小例子
  9. MySQL 查询缓存快速理解。。。(1分钟图解如何优化查询缓存)
  10. Java编程语言下 Selenium 驱动各个浏览器代码
  11. 拓端tecdat|R语言提取时间序列的周期性成分应用EMD,小波滤波器,Baxter过滤器等
  12. otool 与dylib
  13. STM32中使用MMA7660重力加速度传感器
  14. 【图像压缩】替换输入改善压缩+实现可变比特率
  15. operands could not be broadcast together with shapes
  16. Thymeleaf从后端取数据到js中 js中字符串转数字的函数应用
  17. oracle语句怎么查工作日,SQL查询工作日 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区...
  18. 微信小程序之二(创建文件目录)
  19. 广义线性混合模型(GLMM)变量选择
  20. [CORS:跨域资源共享] 同源策略与JSONP

热门文章

  1. 马蜂窝:旅游业正在发生一场需求分散化和供给多样化之间的竞赛
  2. 阿里云服务器被挖矿病毒入侵处理
  3. 图片合成方法 - paste/seamlessclone/或运算/传统方法
  4. Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 【转】
  5. 基于Eureka实现服务注册中心
  6. 按照js对象中的某个值进行排序
  7. Linux | 迁移用户home主目录
  8. 电脑如何双开多开微信?
  9. HBase原理详细概述
  10. xcode怎么执行c语言程序,使用Xcode实现第一个C语言程序——Hello world