【前言】

首先感谢富芮坤和面包板社区,提供的FR3068x-C开发板试用机会。


【FR3068x-C开发板简介】

首先来几张FR3068x-C开发板的靓照

224954fz7jrjwg2gnfrjbm


FR3068E-C 开发板系统框图

224954q9x9zevffieenrew


开发板硬件资源

开发板硬件资源分配如图1-2所示:

image.png

FR3068E-C 开发板特性

 蓝牙V5.3 协议

 串口(PB4-RX、PB5-TX)、 J-Link调试接口(PB10-SWCLK、PB11-SWDIO),支持J-Link

V9

 PCB天线

 4个用户按键、1个复位按键  

 芯片支持2x16路PWM输出

 芯片支持9路12位ADC

 芯片支持3路I2C

 芯片支持5路UART、支持流控功能

 芯片支持2路SPI主接口,支持 QSPI, OSPI;2路SPI做从

 芯片支持2路I2S  

 芯片支持8080-16bit、RGB、QSPI显示屏通信

 芯片支持1路SD卡,支持SDIO3.0/eMMC 4.5.1

 芯片支持USB OTG

 芯片支持4路数字MIC

 芯片支持1路SPDIF输入、1路SPDIF输出

 支持CAN-FD

 支持RS485

 芯片支持RS232

 芯片硬件加密支持AES-128, AES-192, AES-256


开发基于蓝牙共享上网+TCP开发智能家居控制终端


开发环境

Keil 5.3

Python 3.10

vscode

FRECHIP调试工具


项目目标

开发板通过手机蓝牙共享上网,基于TCP/IP 协议与PC、移动终端远程通信,控制开发板LED。

有了此基础框架可以移植MQTT, 连接远程服务器,接继电器、红外遥控等可以控制家里的家电。


开发准备

下载原厂的开发资料、SDK,

下载链接:

https://www.freqchip.com/sjds

解压开发资料。

查看开发板原理图

224957imsvi50ynnuxm1h5

D3,代码里用来代表熄屏状态的。

我这里用D4, 用TCP/IP 协议控制目标。


创建代码工程

224957z06akfkiyi6fukiv

使用富芮坤FR306x_SDK例程提取工具,提取SDK里lvgl示例代码,重命名工程名为smarthome,

首先编译一次,会有很多错误,原因是缺文件,再在SDK复制相对应文件到工程目录里,即可编译通过。


理清代码逻辑及业务功能


命令解析与LED控制:检查接收到的数据内容,如果匹配特定命令(如 "LED_ON" 或 "LED_OFF"),则执行相应的LED控制操作,并再次回传数据。


开始编写代码


首先在main.c里添加LED初始化函数

[/p][p]// USE LED D4--PD15[/p][p]void ledInit(void)[/p][p]{[/p][p]    GPIO_InitTypeDef gpio_config;[/p][p]    gpio_config.Pin = GPIO_PIN_15;[/p][p]    gpio_config.Mode = GPIO_MODE_OUTPUT_PP;[/p][p]    gpio_config.Pull = GPIO_NOPULL;[/p]
  • [p]    gpio_init(GPIOD, &gpio_config);[/p][p]}[/p][p]
  • 复制代码

    然后,在app_at.c里添加定义

    [/p][p]// USE LED D4[/p][p]#define LED_ON()    gpio_write_pin(GPIOD, GPIO_PIN_15, 1)   //开灯[/p][p]#define LED_OFF()   gpio_write_pin(GPIOD, GPIO_PIN_15, 0)  //关灯[/p][p]在数据接收回调函数 tcp_client_recv里添加,TCP接收到指令的处理逻辑。[/p][p]/******************************************************************************[/p][p] * 描述  : 数据接收回调函数[/p][p] * 参数  : -[/p][p] * 返回  : -[/p][p]******************************************************************************/[/p][p]static err_t tcp_client_recv(void *arg, struct tcp_pcb *tpcb,[/p][p]                             struct pbuf *p, err_t err)[/p][p]{[/p][p]    uint32_t i;[/p]
  • [p]    ………..[/p][p]        while(ptmp != NULL)[/p][p]        {[/p][p]            for (i = 0; i < p->len; i++)[/p][p]            {[/p][p]                printf("%c", *((char *)p->payload + i));[/p][p]            }[/p][p]            if(strncmp("LED_ON", (char *)p->payload, 6)==0) {[/p][p]                // extern void led_on(void);[/p][p]                printf("TCP ctrl: LED ON\r\n");[/p][p]                LED_ON();[/p][p]                tcp_write(tpcb, p->payload, p->len, 1);[/p][p]            }[/p][p]            else if(strncmp("LED_OFF", (char *)p->payload, 7)==0)[/p][p]            {[/p][p]                // extern void led_off(void);[/p][p]                printf("TCP ctrl: LED OFF\r\n");[/p][p]                LED_OFF();[/p][p]                tcp_write(tpcb, p->payload, p->len, 1);[/p][p]            }[/p][p]            extern void tcp_rec_show_update(uint8_t *data,uint32_t len);[/p][p]            tcp_rec_show_update((char *)p->payload,p->len);[/p][p]            ptmp = p->next;[/p][p]        }[/p]
  • [p]………………...[/p][p]    return ERR_OK;[/p][p]}[/p][p]
  • 复制代码


    编译工程

    在keil点编译命令。

    225008tpqrxxjx0nehtimg

    生成了project_burn.bin


    烧录固件


    使用FRECHIP调试工具

    加载刚刚生成的project_burn.bin固件

    连接开发板

    225008tlpsxowfi7pnfzxm

    打开串口,现打开烧录

    image.png

    按开发板的“RST”按键,开发板自动开始烧录,烧录完后,自动重启。

    image.png


    【测试】


    开启蓝牙共享上网


    首先用手机连接wifi, 打开WiFi热点和蓝牙共享上网,如图:

    225026wkii8k5okkr1g27l

    手机连接开发板蓝牙,如图所示:

    225026lz3d9n7njjiwvxq7

    按开发板的K3键,下翻到上网测试,按K2键,打开PAN连接。

    电脑打开调试工具,我用的是LLCOM, 创建TCP服务端。查看电脑IP。

    225036de3eja3jn7m450tw


    建立TCP/IP连接


    用FRECHIP调试工具,发送AT指令。

    小插曲,原厂居然没AT指令说明档,说来也奇怪,有了代码,还没有功能说明,不是先有功能需求说明,才开发代码吗?

    225036yof2f7gdzgkf22f2

    于是代码+注释写一个AT指令说明文档详情查看:https://mp.weixin.qq.com/s/8zK21nLxI3EIAezpDFPO9Q

    发送AT指令:

    AT#PD192_168_000_071_02333

    开发板连接上电脑上的TCP服务端, 电脑就可以给开发板发送数据了

    225036o1ugu0uuucbbwa9g


    控制LED


    发送指令LED_ON,可以控制LED亮;

    04cd720f-e77c-4b43-9782-f29f3f0bd56b.png

    发送指令LED_OFF,可以控制LED灭。

    92b24c4d-d810-40e2-bb03-c0d866d0d2f8.png



    【后记】


    时间冲忙,还有很多功能可以实现,比如用 NTP同步互联网时间,获取天气等信息.

    未解决问题:

    TCP数据回传,需原厂大神协助解决。