本帖最后由 KelvinHe 于 2020-6-25 18:35 编辑

1. 前言
首先,感谢主办方的这次活动,让我们有机会可以学习了解这一款蓝牙开发板。
接下来,我来分享学习的一些基本步骤:先查阅开发板的操作指导手册,查看原理图,编译、链接、下载 Demo 软件工程,完成这一系列工作后,可以针对感兴趣的部分进行深入研究。
最后,若遇到难解的问题,可以向技术支持求助。

2. 关于开发板
2.1 开发资料
由于我手中的这一款开发板的硬件版本是V1.4,那么下载对应的资料即可。
开发资料.jpg

2.2 开箱
正面.jpg        反面.jpg

2.3 硬件介绍
《FR8016HA开发板使用手册V1.4(硬件版本V1.4).pdf》此文档详细介绍了开发板的硬件资源,并且附上了原理图,这里就不再赘述了。
硬件资源.jpg
Mark一下几个特点:

  • 蓝牙 IC 的封装很小
  • 板载资源丰富
  • 支持 Jlink 调试,PC6-SCK, PC7-SWD
  • 支持 Jlink 和串口两种烧录方式
点评:板载资源非常丰富,智能家居所需的基础模块都有,包括按键、LED、电机控制、蓝牙、音频、LCD显示、各类传感器等,还预留了很多扩展接口。

2.4 软件介绍
Keil工程。这里放一张典型的工程目录结构图。
keil工程目录.jpg

2.5 Demo 展示
上电后 LCD 即可显示富芮坤Logo。 由于之前安装过 CP210x 系列的驱动,所以插上后系统就识别到了这个设备。
上电识别到的串口号.jpg     JLINK已识别.jpg
解压源码,打开 Keil 工程,编译、链接,链接 Jlink 仿真器。
注意:

  • 需要按下 Reset 键才能被 Jlink 识别。
  • 按键和 IIC 接口都需要用跳线帽短接。

3. 天猫精灵互动
3.1 项目需求
通过天猫精灵控制家用设备,如LED灯。

3.2 项目设计
注:步骤1~3可选,步骤4为必备。
1. 登录天猫精灵开发者平台
2. 实名认证
3. 查看并学习文档
开发者入口:
4.从 gitee 下载源码
建议大家从这个路径下载代码,可以保持更新,里面有一些例程。
5. 开发
最初的想法是将 ble_simple_peripheral 和 ble_mesh 结合起来,那么这个项目就可以连接天猫精灵,并且可以调用一系列传感器,但是后来发现移植过去后,编译器提示存储空间不够用了,可能还需要做一些优化吧。
在此贴上 IO 翻转逻辑修改的代码。
static void app_led_set_state(void)
  • {
  •     uint8_t high_duty,i,pwm_chl;
  •     for(i = 0;i < APP_LED_COUNT;i++)
  •     {
  •         if(app_led_state.on_off_state[i] == 0)  // 语音指令:“天猫精灵,关闭灯”
  •         {
  •             //gpio_portd_write(gpio_portd_read() & (~(1<<(app_led_pwm_map[i]))));
  •             gpio_portd_write(gpio_portd_read() | (1<<(app_led_pwm_map[i])));  // 输出高电平
  •             system_set_port_mux(GPIO_PORT_D, (enum system_port_bit_t)(app_led_pwm_map[i]), PORT_FUNC_GPIO);
  •         }
  •         else  // 语音指令:“天猫精灵,打开灯”
  •         {
  •             if(app_led_state.level[i] == 0xFFFF)
  •             {
  •                 //gpio_portd_write(gpio_portd_read() | (1<<(app_led_pwm_map[i])));
  •                 gpio_portd_write(gpio_portd_read() & (~(1<<(app_led_pwm_map[i]))));  // 输出低电平, 点亮
  •                 system_set_port_mux(GPIO_PORT_D, (enum system_port_bit_t)(app_led_pwm_map[i]), PORT_FUNC_GPIO);
  •             }
  •             else
  •             {
  •                 app_led_calc_pwm_count(&high_duty, app_led_state.level[i]);
  •                 if(i == 0)
  •                     pwm_chl = 0;
  •                 else
  •                     pwm_chl = app_led_pwm_map[i];
  •                 pwm_update((enum pwm_channel_t)pwm_chl, FREQUENCY_SET, high_duty);
  •                 pwm_start((enum pwm_channel_t)pwm_chl);
  •                 system_set_port_mux(GPIO_PORT_D, (enum system_port_bit_t)app_led_pwm_map[i], PORT_FUNC_PWM);
  •             }
  •         }
  •     }
  •     if(app_led_inited)
  •     {
  •         app_mesh_user_data_update((void *)&app_led_state, sizeof(app_led_state), 2000);
  •     }
  •         co_printf("test:%d  %d\r\n", app_led_state.on_off_state[0],app_led_state.level[0]);
  • }
  • 复制代码
    6. bug修复
    如果开发板无法连接天猫精灵,那么可以看看这个文件的这个地方是否写错了。图中为正确写法。
    连接天猫精灵bug修复.jpg

    3.3 项目验证
    编译、链接工程,然后通过 Jlink  烧录到开发板中。
    对天猫精灵说,“天猫精灵,开灯”,此时PD4~PD7会置低电平,此时外接开发板的LED会亮;
    对天猫精灵说,“天猫精灵,关灯”,此时PD4~PD7会置高电平,此时外接开发板的LED会灭。
    验证.jpg

    4. 小结

    • 开发板做工较一般,很多焊点没处理好。
    • 遇到问题,可以在群里提问,有技术支持能够及时响应与支持,点个赞。
    • BLE是个复杂的工程,需要花点时间去理解与开发。