完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言
正所谓做一个大项目一般都需要软硬件的知识结合,当然了这也不一定,有些项目只是需要做一个系统,APP开发等这些。不过对于我想一般人都会遇到这种问题——用什么方法来解决用软件来实现控制硬件,实施数据传输。一般有人都会选择使用APP来控制硬件方面的研究。不过今天的话我就先抛弃APP,先来讲一下根据我网上查找了好久找到的另一种方法 —— 一种基于微信小程序和单片机BLE透传的简要解决方法。 因为根据微信小程序发展的形势来说还是挺火的,再者目前关于微信小程序在控制硬件方面的研究还非常少, 所以说这个方面研究还是挺不错的。那么何为BLE透传? BLE透传 BLE透传即低功耗蓝牙透明传输, 单片机发送数据给低功耗蓝牙时, 不需要其他协议, 低功耗蓝牙就可以将数据发送给其他蓝牙接收设备, 实现单片机与微信小程序之间的通信,使用方便。 BLE透传模块选择 目前的话,我觉得可以推荐一下HC-05/06蓝牙模块。因为采用HC-05/06蓝牙模块进行数据透传, 具有成本低、体积小、功耗低和收发灵敏度高等优点。使用时,BLE透传模块RXD引脚与单片机TXD引脚连接, TXD引脚与单片机RXD引脚连接, 实现系统的通信功能。下面是HC-05模块与单片机配对方式。 **具体使用方法也可以在淘宝搜索HC-05模块,有些商家也提供了资料。 资料下载 提取码:9g8a 软件部分 下面就简单地说一下微信小程序与单片机的通信原理: 微信小程序内置了18个BLEBLE蓝牙API接口, 通调用BLE蓝牙API接口成功连接蓝牙设备后, 可以通过Bluetoothsocket实现微信小程序与BLE蓝牙的数据接收和发送。 在设计过程中中, 会使用到以下的接口: 1.openBluetoothAdapt 用于开启和初始化蓝牙; 2.getBluetoothAdaptState 用于检查蓝牙是否开启; 3.startBluetoothDevicesDiscover 用于开始设备搜索并当发现一个设备后会触发 4.onBlueDeviceFound 事件; 5. creatBLEConnection 用于搜索到设备后连接设备; 6.getBLEDeviceService 用于连接成功后根据目标服务ID找到指定的服务ID, 每一个服务都包含一组特征值用来描述服务特性, 如是否可读, 是否可写, 是否开启notify等,。 7. 利用 getBLEDeviceCharacteristics 获取该特征值值。 8.最终 onBLECharacteristicValueChange 用于监听数据变化[4]。 微信小程序BLE蓝牙API调用方法框图如图: 注意 iOS 微信客户端 6.5.6 版本开始支持,Android 6.5.7 版本开始支持 蓝牙适配器模块生效周期为调用 wx.openBluetoothAdapter 至调用 wx.closeBluetoothAdapter 或小程序被销毁为止。 在小程序蓝牙适配器模块生效期间,开发者才能够正常调用蓝牙相关的小程序 API,并收到蓝牙模块相关的事件回调。 注意 由于系统限制,Android 上获取到的 deviceId 为设备 MAC 地址,iOS 上则为设备 uuid。因此 deviceId 不能硬编码到代码中。 目前不支持在开发者工具上进行蓝牙功能的调试,需要使用真机才能正常调用小程序蓝牙接口。 低功耗蓝牙(BLE)注意事项 iOS 上对特征值的 read、write、notify操作,由于系统需要获取特征值实例,传入的 serviceId 与 characteristicId 必须由 wx.getBLEDeviceServices 与 wx.getBLEDeviceCharacteristics 中获取到后才能使用。建议双平台统一在建立连接后先执行 wx.getBLEDeviceServices 与 wx.getBLEDeviceCharacteristics 后再进行与蓝牙设备的数据交互。 方案结果 目前,已经满足于项目上的功能实现。具体美化还需要继续操作写代码。因为本人已经从事于算法学习,因此呢,我就没有再次更新了。效果如下: 登录界面如下: 蓝牙扫描连接界面: 功能选择界面如下: 二、手把手教制作蓝牙微信小程序 时过很久,项目软件界面、功能已经更新,所以这次我想跟大家一起制作一下无后端下的蓝牙微信小程序(需要后端版本处理的请看这篇文章微信小程序websocket服务器) 1、小程序登录界面设计 因为考虑到功能的实现上没有后端云服务处理,因此登录界面里只绑定了一个页面跳转事件,无账号、密码登录设计。当然了你也可以自己在.js界面设置添加账号密码功能设计。下面开始: welcome.wxml: 这里要注意一点的是:wxml里面加载图片作为背景图片时,使用image组件,图片路径要放在跟welcome.wxml跟目录下,要不然会失效。 welcome.wxcc: page{ height:100%; width: 100%; } .background { width: 100%; height: 100%; position:fixed; background-size:100% 100%; z-index: -1; } .login{ position: absolute; top: 400px; left: 180rpx; width: 50%; color: white; background-color: green; border-radius: 100rpx; font-size: 18px; } welcome.js: 只需要添加这个函数就行了 login:function(){ // 关闭当前页面,跳转到应用内的某个页面。 wx.redirectTo({ url: '../choice/choice' }) } 其中,wx.redirectTo为表示跳转页面不保存当前页面,也就是说不能直接返回原来的页面。 效果如图所示: 2、功能界面设计 因为设计项目的需要,这里的功能采用了项目里门禁的功能,大家可以按照自己的需求修改自己所需的就行了。 一共有四个功能,分别为模式选择、直接开锁、定时开锁和查询记录。 其中,用户选择功能界面设计代码如下: /* pages/choice/choice.wxss */ page{ height:100%; width: 100%; } .img{ height: 200rpx; width: 200rpx; } .btn1{ position: absolute; top: 100px; left:50rpx ; height: 200rpx; width: 300rpx; padding: 0; border: none; border-radius: 20rpx; background-color: skyblue; } .btn2{ position: absolute; top: 280px; right:50rpx ; height: 200rpx; width: 300rpx; padding: 0; border: none; border-radius: 20rpx; background-color: lightgreen; } .btn3{ position: absolute; top: 100px; right:50rpx ; height: 200rpx; width: 300rpx; padding: 0; border: none; border-radius: 20rpx; background-color: lightgoldenrodyellow; } .btn4{ position: absolute; top: 280px; left: 50rpx; height: 200rpx; width: 300rpx; padding: 0; border: none; border-radius: 20rpx; background-color: slategrey; } .countDown{ position: absolute; top: 60px; left: 100rpx; height: 100rpx; width: 200rpx; padding: 0; border: none; font-size: 50rpx; } .countDown2{ position: absolute; top: 60px; right: 100rpx; height: 100rpx; width: 150rpx; padding: 0; border: none; font-size: 50rpx; } .countDown3{ position: absolute; top: 240px; left: 100rpx; height: 100rpx; width: 300rpx; padding: 0; border: none; font-size: 50rpx; } .countDown4{ position: absolute; top: 240px; right: 100rpx; height: 100rpx; width: 150rpx; padding: 0; border: none; font-size: 50rpx; } .background2 { position: absolute; top: 42px; left: 20rpx; width: 95%; height: 75%; position:fixed; background-size:80% 80%; z-index: -1; } 3、蓝牙绑定、发送、接受功能设计 为了简化、美观,本次设计未采用查询附近蓝牙、按钮点击触发事件连接蓝牙,而是加载功能界面后自动连接所指蓝牙模块。后续会讲解怎么样查看自己买的蓝牙的ID等信息,当然本程序里也给出了搜索蓝牙功能的程序。 4、STM32蓝牙通信测试 为了保证微信小程序蓝牙通讯是否成功,首先要试验32是否可以进行蓝牙通讯。因此,我们需要下载一个Android环境蓝牙调试助手软件测试32的蓝牙通信,也包括了通信的协议。 5、小程序与32通信测试 若第四步骤实现成功,则开始测试。 结束导语 **因为项目中我还负责了神经网络的人脸识别,所以这里我就简单地描述了实现方案和结果。最后还推荐大家一个蓝牙模块调试软件:Android的APP——BLE调试 蓝牙模块本人使用的是点击这里 emm,对于这个方案的话,你们要是还是不太懂BLE数据传送这个的话,我可以推荐你们去看一下这个: 手把手教你开发BLE数据透传应用程序 当然了,如果大家对微信小程序开发不太懂得话,可以点击下面链接了解了解一下: **微信小程序开发指南教程** 如果有什么问题的话,可以在评论区发表意见,大家共同学习一下。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:35 , Processed in 1.134130 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号