转载自:

https://blog.csdn.net/hunhun1122/article/details/69676832

蓝牙nrf51822源代码固件编译,使用上篇搭建的开发环境进行源代码的讲解和编译,下载到开发板中。
 
(电脑烧写开发板连线图)仿真+串口的接线。

一、固件源代码下载
 
网盘下载:http://download.csdn.net/detail/hunhun1122/9807709

二、源代码目录结构。

services目录里ble_wechat_service.c主要是通信服务功能。
products目录里mpbledemo2.c是airsync验证授权按键收发功能等。
source目录里main.c是入口函数,代码从这里开始走起。
common目录里是一些公用的部分,md5/aes等等

其它代码主要都是官方ble的sdk代码,也采用轮寻的一个小系统,有兴趣可以研究一下。
同时我们也提供纯的ble项目代码,不含airsync,大家就可以知道app如何和ble交互了,以后会做扩展篇。

三、源代码讲解

源代码我们主入口main开始,为大家一一解说。双击main.c,声明了m_ble_wechat(微信协议),

m_mpbledemo2_handler(数据事件)。

然后进行resource_init资源初始化,advertising_start(蓝牙广播)。
最后进入数据事件轮循,让ble运行。

 
点击resource_init,再按F12自动跳转到函数,如上图。
uart_init()串口初始化。
timers_init()定时器初始化
gpiote_init()io针脚初始化
buttons_init()按钮初始化
ble_stack_init()蓝牙协议践初始化
get_mac_addr(m_addl_adv_manuf_data)获取mac地址等等...

这里我们主要关心,串口调试要用到最多的,io针脚控制灯开关的,buttons按钮,其它很多都

是ble系统内部的,我们只要会用就可以了。

在uart_init按F12,跳转到uart_init的函数里,因为串口输入做为最重要的调试日志。
在这里设置了串口的脚针,串口的波特率UART_BAUDRATE_BAUDRATE_Baud9600。

 
在buttons_init按F12,跳转到buttons_init的函数里,这里设置了二个按键,一个重启、一个botton1。

在ble_stack_init按F12,跳转到协议践的初始化,看到代码将m_ble_wechat、m_mpbledemo2_handler

引入,然后on_ble_evt(p_ble_evt)这个函数处理事件,比如蓝牙连接事件,断开事件,发送数据事件,

下图我们看看业务类的各个函数声明。

 
这个就是微信业务处理的各个函数,在main()里也一直请求m_data_main_process_func函数。

mpbledemo2_data_consume_func,如上图,这个函数接收微信发来的处理,进行验证然后解析,

判断是openLightPush就开灯,是closeLightPush就关灯的处理。

做扩展功能可以在这里进行修改,如果是别的值就做别的事。

mpbledemo2_button_handler,这个函数处理按键点击后,执行发送信息给微信的实例,仿这个做

成传感器传数据就可以啦。

最重要的源代码就是上面讲的这些,想深入研究可以了解ble协议践吧,加油。

四、DeviceID和DeviceType申请和配置
 
http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
点击登陆,然后使用个人微信扫描登陆。

 
先添加一款产品,找到设置,点击进入。

 
 
添加产品,然后填写相关信息,选择蓝牙,以后我们做Wifi时再选择wifi哦。

 
申请成功后,点击产品详情,会看到产品编号,记住它。

 
在上面获取账号appID、appsecret。

 
http://mp.weixin.qq.com/debug/,打开微信公众平台接口调试工具。

 
输入appID、appsecret,获取access_token,后面会使用到这个值。

 
选择:硬件接入api接口调试,设备授权-获取deviceid和二维码 /device/getqrcode,输入access_token。
点击检查问题后,会看到"errcode": 100020, "errmsg": "account quota not enough"
这是因为新版本需要输入&product_id=xxxx,就是上面我们申请得到的产品编号10114(要填写自己的哦)

复制https://api.weixin.qq.com/device/getqrcode?access_token=7olhdCJrKFWLots92V0YIq6Oa

xj9JHKLj3t41zqnkw8QNky61_g6a550QsT51_ue

1x5ekUN0T48ishysQsR0Dls9xW7elU44fdLDhvwEk7BWEvHcXrZRnQIQw0pfRIvFUXDcAIAZCI

&product_id=10114(复制你自己生成的哦),后面是添加&product_id=10114(自己的产品编号)

,用另一个网页选项卡打开,会返回下面的json格式。

{"base_resp":{"errcode":0,"errmsg":"ok"},"deviceid":"gh_0c61a2431300_9886c60e32d1eeff",

"qrticket":"http:\/\/we.qq.com\/d\/AQDOu5W-_BTxnVphy1Ew-SZRjz3fd6nTFwvm1_qO"}

那么这样就成功获取到deviceid,qrticket(到二维码网站生成就可以扫描了)

选择:硬件接入api接口调试,设备授权-利用deviceid更新设备属性 device/authorize_device,填

写下面的代码

{
    "device_num": "1", 
    "device_list": [
        {
            "id": "gh_0c61a2431300_9886c60e32d1eeff", 
            "mac": "D28403895E11", 
            "connect_protocol": "3", 
            "auth_key": "", 
            "close_strategy": "1", 
            "conn_strategy": "1", 
            "crypt_method": "0", 
            "auth_ver": "0", 
            "manu_mac_pos": "-1", 
            "ser_mac_pos": "-2"
        }
    ], 
    "op_type": "1",
    "product_id": "10114"
}
这里要注意,id就是deviceid,mac是开发板的mac地址(下面教大家如何获取),product_id是您申请的id。

获取mac,先去搜索lightBlue软件APP(苹果)
安卓:http://pan.baidu.com/s/1eSDKPRc (android下载安装运行,在首页就能看到mac地址了)
 
运行,开发板上电后,会看到蓝牙4.0的列表,点击联接。

 
看到0xFEC9的Read字段,就是mac地址啦。

 
看到OxD28403895E11,就是要的mac地址。

 
{
   "button":[
      {
           "type":"click",
           "name":"点灯",
           "key":"V1001_LIGHT_ON",
           "sub_button":[]
       },
       {
           "type":"click",
           "name":"灭灯",
           "key":"V1001_LIGHT_OFF",
           "sub_button":[]
       }

}
这一步是让公众号生成菜单,成功以后重新进入公众号就能看到菜单了。

 
{"device_id":"gh_0c61a2431300_40687af62461527e","openid":"ozruVv7ujVGDkPGkFdD4ymVBdfQw"}

强制解绑,要输入device_id和openid,openid在测试公众号里面的 "用户列表" 可以看到。
(这个功能一般不用,有时绑定了多个硬件,可以用这个方法解绑)

五、编译固件、下载到蓝牙开发板
 
编译固件之前,需要刷写ble的协议浅(你可以理解为底层固件)。

运行nRFgo Studio软件,选择nRF51 Programming,选择SEGGER to USE,点击Program SoftDevice,

点击Browse选择"蓝牙demo源代码V3\softdevice"目录里的s110_nrf51822_5.2.1_softdevice.hex,

点击Program进行刷写。

 
接下来在源代码里设置参数值,准备APPlication的编译,双击comsource.c,右击打开comsource.h头文件

 
看到
#define RX_PIN_NUMBER  11 
#define TX_PIN_NUMBER  9 
#define LED0 20            
#define SYS_RESET 19      
先要设置一下串口脚针,和按键io针脚,要看好开发板的原理图,我们板的io针脚如上图设置。

 
双击mpbledemo2.c,右击打开mpbledemo2.h头文件

 
#define DEVICE_TYPE "gh_0c61a2431300"
#define DEVICE_ID "gh_0c61a2431300_abff4dbc6c022240"
#define EAM_md5AndNoEnrypt 1

修改成第4节申请获得的参数,DEVICE_TYPE就是微信原始id,DEVICE_ID就是deviceid,

EAM_md5AndNoEnrypt使用md5不加入验证。

改成这样,在扫描二维码时才能对应上某个硬件。

 
设置编译参数,右击项目,Option for Target 'nrf51822'

 
设置板型号,选择nRF51822_xxAA。

 
设置IROM1和IRAM1数据,这一般在硬件参数文档datasheet有相关介绍。

 
选择J-LINK仿真器,然后确定,之后就可以编译了,上图RAM for Algorithm要改成0x20002000(图上是错的)。

 
点击编译(或F7,Project->Build targets),然后点击下载(Flash->DownLoad),
看到Application running ...,下载到开发板里就成功了。

六、测试演示airsync蓝牙功能
 
airsyscndebug下载:http://pan.baidu.com/s/1mhMLPhA

airsyscndebug是一款专门测试airsyscn协议的app,目前只有安卓,使用它测试通过,

那么说明协议就正常了。

 
点击列表蓝牙的ble(列表里也可以看到mac地址哦)。

 
点击设置,设置完成再点手动测试。

 
DEVICE_TYPE就是微信原始id,DEVICE_ID就是deviceid,还记得源代码里也要设置这个吗?一一对应哦。

 
点击手动测试,如果看到以上图,说明airsysnc协议正常,没有问题了。

 
我们运行“串口调试助手.exe”(以前都有说,没有百度下载吧)
在点手动测试时,串口数据会出现如上图,开发板以后的调试要靠串口数据(非常关键)

 
返回退出airsysncdebug界面,将第4节生成的二维码生成:http://cli.im/

 
打开微信,扫描二维码,然后确定绑定(如果以前绑定过,一直显示未绑定,可以强行解绑,再扫描一次第4节)

进入到公众号界面,会显示正在连接中,已连接等字样(我手机显示connected,

如果一直显示正在连接,未连接.....,请重上电开发板和微信多试,经常有这样的问题,

可能是微信测试服务号不稳定)

 
连接成功,同时串口调试助手会显示如上log,就是连接验证授权的成功过程了。

点击点灯,正常则显示已发送xxxxx(如果这时显示服务器不可用,那么公众号和服务器请求

不成功,多试和检查服务器,如果显示未绑定请强行解绑再扫二维码一次)

 
这时开发板串口会收到如上数据,源代码解析数据后判断是开灯,就执行了开灯命令light on。

只要我们在这里改一下,就可以实现开门,关窗,发送各种命令(机器人的话就摇头晃脑命令

咯),那开发板怎么把数据传给微信呢?下面我们用开发板按键模拟。

 按下开发

板上的k2按键,微信就会收到如上信息,

如果按键换成是传感器,微信收到的信息经过的我们部署的服务器时,我们就可以把数据

保存到数据库进行用户数据分析,达到智能的概念了。

 
再看看串口数据,按键时会msg to send,我们设定默认是Hello,wechat!
然后微信收到后又响应发送了信息回来,这就是硬件和微信的交互了咯。

 
这就是微信发送给硬件开发板的API接口,我们也可以用JS调用呀,厉害了然后想怎么搞就行了。
硬件开发板发送数据给微信是使用蓝牙协议的,在源代码里有发送函数哦,更深入自己去研究吧,大神们。

常见问题(调试微信经常出现一些莫名的问题):
1、如何在公众号生成菜单?答:默认是不会在公众号生成菜单,上文就有具体生成菜单的操作方法。

2、在微信公众号开发DEMO的源代码上,菜单新增了url,调用无法生成?
答:动态实行是无法建立的,源代码的BUG问题,按上面方法手动改代码,直接生成,退出再登陆就看到了。

3、扫描二维码,显示连接中,然后断开又重新连接?
答:测试号经常有这样的问题,有时可以连有时又不可以连接,多试几次。

4、设备授权-device/authorize_device,需要注意些什么?
答:"connect_protocol": "3", 这个是3;"auth_key": ""使用加密需填写; "op_type": "1",1为新增;"product_id": "10114"产品编号。
            
5、开发板没有串口输出?
答:在固件源代码里,搜到如下设置正确您开发板的针脚。
#define RX_PIN_NUMBER  11 #define TX_PIN_NUMBER  9

微信硬件开发系列教程07-蓝牙nrf51822固件编译(airkiss/airsync)相关推荐

  1. 微信硬件开发系列教程04-新浪云服务器搭建(airkiss/airsync)

    https://blog.csdn.net/hunhun1122/article/details/69676793 上篇已经介绍如何编译出源代码,这篇我们在新浪云搭建服务器, 然后部署上去,实现在微信 ...

  2. 微信程序开发系列教程(二)微信订阅号+人工智能问答服务

    我的前一篇文章**微信程序开发系列教程(一)**开发环境搭建 已经介绍了微信服务器的开发环境搭建.本文作为开发系列的第二篇文章,介绍如何给您的微信订阅号开发一个最简单的问答服务,非常好玩. 这个系列的 ...

  3. Auto.js Pro安卓免ROOT引流脚本开发系列教程07微信运动点赞(4)

    课程内容 翻页前判断是否在指定页面 翻页到达底部的处理 封装接口函数 开发环境与工具 开发环境:Visual Studio Code Auto.js:Pro 7.0.3-7 终端设备:红米NOTE5A ...

  4. 微信程序开发系列教程(一)开发环境搭建

    1. 您得从微信官方平台注册一个微信订阅号: https://mp.weixin.qq.com 2. 这个教程使用nodejs开发微信订阅号对应的消息服务器,因此需要具备基本的nodejs开发技能. ...

  5. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  6. 微信小程序开发系列教程三:微信小程序的调试方法

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 这个教程的前两篇文章,介绍了如何用下图所示的微信开发者工具自动生成一个Hel ...

  7. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  8. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  9. 微信公众号开发系列教程一(调试环境部署)

    http://www.cnblogs.com/zskbll/p/4074855.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

最新文章

  1. [转]Introduction of iSCSI Target in Windows Server 2012
  2. ICCV2017 | 一文详解GAN之父Ian Goodfellow 演讲《生成对抗网络的原理与应用》(附完整PPT)
  3. 02 面向对象之:类空间问题以及类之间的关系
  4. crackme 逆向寒假生涯(22/100)
  5. SpringBoot中使用thymeleaf模板时select下拉框怎样查询数据库赋值
  6. 你所需要的MySQL检索语句(DQL)都在这儿(小白都能懂的哦)
  7. 禁售苹果手机_苹果、华为供应商工厂突发火灾!浓烟冲天
  8. C# 正则表达式验证数据类型
  9. Win11系统可以快速截屏吗?
  10. python用pip安装numpy清华_安装numpy和matplotlib
  11. python tkinter教程-事件绑定_详解python tkinter教程-事件绑定
  12. 计算机专业英语常用术语大全,计算机专业必备英语词汇汇总
  13. 基于matlab的64QAM通信系统的仿真
  14. 什么是黑帽seo?黑帽seo技术盘点。
  15. excel表格自动填充为汉字拼音首字母
  16. Dichotomy专栏:Leetcode:#33 搜索旋转排序数组
  17. 解决:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pk gs/main/win-64/c
  18. 命令行工具 DOT和DOH测试
  19. pic16f1829 c语言,PIC16F1829 串口初始化程序及应用
  20. docker修炼手册

热门文章

  1. Wayfair产品责任险如何购买,产品责任险投保的范围,哪些平台需要购买产品责任险
  2. ENVI BSQ转BIL或者BIP
  3. 【2023秋招面经】20220805安恒信息实习
  4. FASS全闪高性能文件网关解决方案
  5. clip python_Python pandas.DataFrame.clip函数方法的使用
  6. 1.5 DICOM图像CT值转RGB
  7. 《程序.花开百味》雷伟.著
  8. 上海社保查询 最强攻略
  9. iphone QQ音乐锁屏歌词实现思路
  10. 1970 matla 时间_Matlab中时间戳转换为日期的函数