很荣幸能够申请到富芮坤的FR8016H物联网开发板,这次申请到的开发板,虽然说主控芯片拥有蓝牙内核,但是板子上也有Wifi模块ESP-01S的接口。蓝牙只能在局域网内使用,我想做的Demo是基于广域网的,所以选择使用了Wifi模块。
一、产品开路
不得不说,富芮坤的开发板是真的好,没收到快递之前,我还以为板子的尺寸至少有10cm*10cm以上,因为我看到的简介中,这块开发板拥有很多的板载芯片,而且是我们常用的芯片。但是一开箱,板子确实惊艳到我了,板载那么多的外设,尺寸大约只有8cm*6cm大小。一个板子板子竟然能做到如此小巧而精美,给富芮坤点赞。
FR8016H物联网开发板的主控芯片是FR8016HA SOC蓝牙芯片,其符合BLE5.0标准的SOC芯片,内置16位audio codec,内置PMU,在蓝牙协议范围内提供了强大的连接特性。
突出的优势有以下三个方面:
(a) 内置16位audio codec:可以支持低成本的麦克风音频输入和模拟音频输出。在智能灯控,智能锁等应用中提示音的输出都是刚需。
(b) 内置PMU:可以对外部锂电池提供200mA的充电电流,同时内部的LDO可以对外提供60mA左右的电流。在便携消费类产品中提供了单片解决方案,降低了产品的系统成本,比如智能穿戴等。
(c) 在蓝牙协议范围内提供了强大的连接特性:主从一体,支持多达20个蓝牙设备同时保持连接,支持标准的SIG MESH以及客户定制的私有MESH协议。在智能电网应用中,智能传感器网络等应用中都有蓝牙多连接的需求。
FR8016H物联网开发板板载外设多得,确实值得称赞。
2、USB 转TTL芯片与 USB接口
3、六轴陀螺仪
4、外接电池接口
5、温湿度传感器芯片
6、3个按键
7、2个LED灯
8、喇叭接口
9、空气质量检测模块接口
10、ESP01 Wifi模块接口
11、步进电机接口
12、像素密度为240*240的LCD屏。
二、应用思路
这次参加富芮坤我的作品应用思路是,使用Wifi模块连接到家里的路由器,借助远程TCP服务器,把家里的温度、湿度、大气压情况发送到
手机端。这样能在局域网内观察到家里的温度、湿度、大气压情况,在广域网也能观察到家里的温度、湿度、大气压情况。
硬件方面比较简单,结合开发板,在WiFi接口接上ESP01S模块,使用几根杜邦线,连接传感器芯片到主控引脚。
Wifi模块为了减少时间,只是使用AT指令进行控制。通过UART输出AT指令到Wifi模块,进而控制它。官方提供的原理图中,WiFi模块的RX、TX接到主控芯片的PD5、PD4,但是还有U1TXD、U1RXD的网络标号,不要以为PD4、PD5只能使用为UART1串口,也可以复用为UART0的TX、RX。
PD4、PD5的复用功能很多,如下所示。这就使得芯片的引脚可以灵活的运用起来。
#define PORTD4_FUNC_D4 0x00#define PORTD4_FUNC_I2C0_CLK 0x01 #define PORTD4_FUNC_I2S_CLK 0x02 #define PORTD4_FUNC_PWM4 0x03 #define PORTD4_FUNC_SSP0_CLK 0x04 #define PORTD4_FUNC_UART0_RXD 0x05 #define PORTD4_FUNC_UART1_RXD 0x06 #define PORTD4_FUNC_ANT_CTL0 0x07 #define PORTD4_FUNC_PDM_CLK 0x08 #define PORTD4_FUNC_ADC0 0x0c #define PORTD5_FUNC_D5 0x00 #define PORTD5_FUNC_I2C0_DAT 0x01 #define PORTD5_FUNC_I2S_FRM 0x02 #define PORTD5_FUNC_PWM5 0x03 #define PORTD5_FUNC_SSP0_CSN 0x04 #define PORTD5_FUNC_UART0_TXD 0x05 #define PORTD5_FUNC_UART1_TXD 0x06 #define PORTD5_FUNC_ANT_CTL0 0x07 #define PORTD5_FUNC_PDM_DAT 0x08 #define PORTD5_FUNC_ADC1 0x0c
复制代码void Wifi_Init(void){ system_set_port_pull(GPIO_PD4, true); system_set_port_mux(GPIO_PORT_D, GPIO_BIT_4, PORTD4_FUNC_UART0_RXD); system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_UART0_TXD); uart_init(UART0, BAUD_RATE_115200); }
复制代码我到LCD屏初始化代码下查看,发现有 DEV_V_1_4,这是1.4板子的LCD初始化代码。把DEV_V_1_4 定义为0:#define DEV_V_1_4 (0) //FR8016H DEV1.4,屏幕显示正常。
{ LCD_WR_REG(0xfe); LCD_WR_REG(0xef); LCD_WR_REG(0x36); LCD_WR_DATA8(0x48); LCD_WR_REG(0x3a); LCD_WR_DATA8(0x05);
复制代码大气压采集使用的是板载上的CAPB18-001传感器,它的驱动代码也是使用SDK中的代码。
系统上电后,Wifi模块进行初始化,初始化完成才能,采集数据,上传数据到手机端,时间大约需要七秒。
Wifi初始化完成后,进行其他外设初始化。然后创建两个周期性任务,一个是进行数据采集和显示更新,一个是数据发送到手机端。分别为1秒执行一次,3秒执行一次。
//OS Timer
os_timer_init(&timer_refresh,timer_refresh_fun,NULL);//创建一个周期性1s定时的系统定时器
os_timer_start(&timer_refresh,1000,1);
os_timer_init(&timer_espsend_fresh,timer_espsend_fun,NULL);//创建一个周期性3s定时的系统定时器
os_timer_start(&timer_espsend_fresh,3000,2);
四、功能体验
系统重启后,会显示图片,等待Wifi模块初始化完成。
大约7秒后,LCD显示下面内容。显示的数据大约1秒更新一次。
打开手机端的网络调试助手,连接到指定的广域网下TCP服务器,可以看到手机收到了开发板上传的数据。
五、客观评价
FR8016H物联网开发板板载资源、主控芯片方面都很好,但是开始时,必须要仔细看原理图,因为很多板载芯片不是直接连到主控芯片的,很多是需要跳线帽或者杜邦线把板载芯片接到主控芯片引脚。开发板附带的跳线帽有点不够,应该多送几个。
个人觉得官方SDK的主控外设函数接口说明不够全面,只找到一份SDK 使用指导书,但是里面的东西不够多,比如UART外设中断怎么使用配置,系统时间函数说明等等都没有。但是相信富芮坤这方面一定会做得更好。
六、关键代码
void simple_peripheral_init(void){ demo_LCD_APP(); Wifi_delay_1ms(2000); esp_init(); //SendStr("hello"); //demo_LCD_APP(); //显示屏 demo_CAPB18_APP(); //气压计 demo_SHT3x_APP(); //温湿度 gyro_dev_init(); //加速度传感器 lcd_show_logo(lcd_show_workmode[App_Mode]);//刷新,显示当前模式的名称 //OS Timer os_timer_init(&timer_refresh,timer_refresh_fun,NULL);//创建一个周期性1s定时的系统定时器 os_timer_start(&timer_refresh,1000,1); os_timer_init(&timer_espsend_fresh,timer_espsend_fun,NULL);//创建一个周期性1s定时的系统定时器 os_timer_start(&timer_espsend_fresh,3000,2); }
复制代码void timer_refresh_fun(void *arg){ /*SendStr("hello"); SendLR();*/ uint8_t LCD_ShowStringBuff[30]; int8_t ret=0; //SHT30数据读取,并在lcd上显示 LCD_ShowChinese(20,100,6,16,BLUE); //温 LCD_ShowChinese(40,100,7,16,BLUE); //度 LCD_ShowChinese(20,120,8,16,BLUE); //湿 LCD_ShowChinese(40,120,9,16,BLUE); //度 LCD_ShowChinese(20,140,10,16,BLUE); //气 LCD_ShowChinese(40,140,11,16,BLUE); //压 ret = sht3x_measure_blocking_read(&temperature, &humidity);//Read temperature humidity if (ret == STATUS_OK) { co_printf("temperature = %d,humidity = %d\r\n",temperature,humidity); sprintf((char *)LCD_ShowStringBuff,": %0.1f ",temperature/1000.0); LCD_ShowString(60,100,LCD_ShowStringBuff,BLACK); sprintf((char *)LCD_ShowStringBuff,": %0.1f%% ",humidity/1000.0); LCD_ShowString(60,120,LCD_ShowStringBuff,BLACK); } else { //co_printf("SHT30 error reading measurement\n"); sprintf((char *)LCD_ShowStringBuff,": error "); LCD_ShowString(60,100,LCD_ShowStringBuff,BLACK); sprintf((char *)LCD_ShowStringBuff,": error "); LCD_ShowString(60,120,LCD_ShowStringBuff,BLACK); } //CAPB18数据读取,并在lcd上显示 ret = CAPB18_data_get(&capb18_temp,&capb_airpress); if(ret == true) { sprintf((char*)LCD_ShowStringBuff,": %7.5f ",capb_airpress); //co_printf("%s\r\n",LCD_ShowStringBuff); LCD_ShowString(60,140,LCD_ShowStringBuff,BLACK); /* sprintf((char*)LCD_ShowStringBuff,"CAPB18_TMP= %7.5f ",capb18_temp); co_printf("%s\r\n",LCD_ShowStringBuff); LCD_ShowString(20,200,LCD_ShowStringBuff,BLACK);*/ } else { //co_printf("CAPB18 error reading measurement\n"); sprintf((char*)LCD_ShowStringBuff,": error "); //co_printf("%s\r\n",LCD_ShowStringBuff); LCD_ShowString(60,140,LCD_ShowStringBuff,BLACK); //sprintf((char*)LCD_ShowStringBuff,"CAPB18_TMP= error "); //co_printf("%s\r\n",LCD_ShowStringBuff); //LCD_ShowString(20,200,LCD_ShowStringBuff,BLACK); } }
复制代码void timer_espsend_fun(void *arg){ uint8_t StringBuff[40]; sprintf((char *)StringBuff,"Temperature= %0.1f \n",temperature/1000.0); esp_send(StringBuff); Wifi_delay_1ms(10); sprintf((char *)StringBuff,"Humidity= %0.1f%% \n",humidity/1000.0); esp_send(StringBuff); Wifi_delay_1ms(10); sprintf((char*)StringBuff,"Press= %3.3fKPa ",capb_airpress/1000.0); esp_send(StringBuff); Wifi_delay_1ms(10); }
复制代码由于最近事情很多,时间很匆忙,做得一个很小的物联网方案。使用Wifi模块连接到家里的路由器,借助远程TCP服务器,把家里的温度、湿度、大气压情况发送到手机端。这样能在局域网内观察到家里的温度、湿度、大气压情况,在广域网也能观察到家里的温度、湿度、大气压情况。方案内容不多,还有很可以改进的地方,没有时间将设备接入物联网平台很是遗憾,但是后面会重新改进。后面会使用开发板的BLE5.0 蓝牙功能,因为这才是FR8016H物联网开发板的重点,后面有时间还会进行这方面的学习分享。