|
选定了nordic的nRF51822,然后就去某宝上面淘的一枚开发板来搞。
拿到板子不会搞,咨询了官方客服,学习了半天SDK,好不容易才把开发环境搭好,如图:
好了,开始编程,开始以为会需要研究好久的蓝牙的东西,学习了SDK的接口之后,仿照SDK里面提供的例程,
也照猫画虎的写了一下简单的开关程序:
#include "juma_sdk_api.h" //包含SDK头文件
#define SWITCH_PIN 28 //定义开关的GPIO,开发板上面集成的MOS管
#define SWITCH_LED 2 //定义指示灯,这个开发板上集成LED默认是2
void ble_device_on_message(uint8_t type, uint16_t length, uint8_t* value) //设备收到信息的回调函数
{
switch(value[0])
{
case 0:
gpio_write(SWITCH_PIN, 0); //0的话,拉低电平
break;
case 1:
gpio_write(SWITCH_PIN, 1); //1的话,拉高电平
break;
default:
break;
}
}
void ble_device_on_disconnect(uint8_t reason) //当蓝牙断开的时候的回调函数
{
ble_device_set_advertising_interval(250); //重新设置广播周期
ble_device_start_advertising(); //重新开启广播
gpio_write(SWITCH_LED, 1); //指示灯灭掉
}
void ble_device_on_connect(void) //当蓝牙连接上的时候的回调函数
{
gpio_write(SWITCH_LED, 0); //指示灯亮起
}
void on_ready() //这个SDK把主函数写在了库文件里面,相当于往时间轴上面插任务,属于异步编程模式。
//这个函数是整个应用层代码的入口,也就是开发板上电的时候立即执行的函数。
{
ble_device_set_name("Test"); //设置蓝牙开发板广播的名字,传说可以设置中文,不过需要编码我不会。。。
ble_device_set_advertising_interval(250); //设置蓝牙广播周期
ble_device_start_advertising(); //开启蓝牙广播
gpio_setup(SWITCH_PIN, GPIO_OUTPUT); //初始化开关控制引脚GPIO为输出模式
gpio_setup(SWITCH_LED, GPIO_OUTPUT);//初始化指示灯引脚GPIO为输出模式
gpio_write(SWITCH_LED, 1); //默认指示灯灭掉
}
很简单的几行代码,会点C语言就能写的来吧。。
根本没涉及太高深的蓝牙的内容额。
好了,写好嵌入式代码,开始接线,用一个Jlink,四根线咔咔咔几下接好,Vcc,GND,DIO,CLK接好是这样的:
按照教程的烧录方法,把协议栈烧进去,然后把应用层代码烧进去。OK
拿出来手机,我之前下载好了我比较熟悉的蓝牙测试工具LightBlue,有点丑。。。
点击连接,板子灯亮,连接成功
后续控制什么,我还没找到家里可以拆电器的,风扇,电灯都是我的目标,等以后买个继电器再搞吧,至少到现在,蓝牙是可以通信了。 |
|