本帖最后由 不學會32不改名 于 2020-1-3 08:56 编辑
<回复超过50后续会附上完整软件包>
项目介绍功能描述|操作流程1.使用ESPWIFI模块连接到天气网站,定时获取天气信息,将天气信息显示在LCD上.
2.本地MCU定时采集传感器状态,显示在LCD上. 通过按键 KEY0,KEY1可以切换显示界面。附件有显示界面 3.将picture目录下的图片资源心知PIC复制到SD卡中,将SYSTEM文件复制到SD卡。 4.系统上电后执行cp命令,将SD卡中的PICTURE复制到SPIFLASH中。 5.获取到的北京时间,存放到RTC中,每成功获得一次就同步一次。 6. 硬件平台1.正点原子潘多拉开发板.
2.ESP8266.
3.SD卡 软件平台本项目基于RT-Thread创建. 软件包- aht10
- ap3216c
- AT
- button_drive
- Cjson
- EasyFlash
- Fal
- Filesystem
- Fines
- ChineseFont
- Netdev
- Sal
- Sensor
- Tjpgdec
记录进度已完成- wifi模块已配置完成,可以get到http的json数据
- 文件系统配置完成,可以正常访问SD和SPIFLASH
- 目前需要制作字库,来显示汉字部分,字库使用正点原子制作的字库(注意:该字库为GBK字库,请确认.c文件类型是否为GBK,否则无法解析)
- 上电挂载文件系统,挂载成功后,检测SPIFLASH中是否有字库文件,如果没有,更新SD卡字库到SPIFLASH
- JPG图片也可以更新到SPIFLASH中。存在的问题:SPIFLASH的文件系统,无法保存文件内容。比如:在根目录'/'创建文件(SPIFLASH挂载在'/'下),系统复位后此文件会丢失。(是因为在系统初始化过程中调用了 dfs_mkfs("elm", FS_PARTITION_NAME);)
注意事项- 1.wifi模块已配置完成,可以get到http的json数据
- 2.文件系统配置完成,可以正常访问SD和SPIFLASH
- 3.目前需要制作字库,来显示汉字部分,字库使用正点原子制作的字库(注意:该字库为GBK字库,请确认.c文件类型是否为GBK,否则无法解析)
- 4.上电挂载文件系统,挂载成功后,检测SPIFLASH中是否有字库文件,如果没有,更新SD卡字库到SPIFLASH
- 5.将JPG图片可以更新到SPIFLASH中,目前存在问题,SPIFLASH文件系统分区,无法保存文件
- jpg图片存在部分图片无法解码。
- esp任务存在tcp连接失败的情况,需要加强wifi连接的稳定性。
- 中文格式显示GBK232 ,此工程格式为UTF8,所以要将UTF8格式的汉字转换为GBK编码。
- 如果看到提示"Failed to initialize filesystem!,这是因为指定的挂载设备中还没有创建文件系统。 在msh 中使用命令mkfs -t elm filesystem 可以在名为“filesystem” 的块设备上创建elm-fat 类 型的文件系统。
- /* Wiced WiFi */
- #define PKG_USING_AT_DEVICE
- #define PKG_AT_INIT_BY_THREAD
- #define AT_DEVICE_ESP8266
- #define AT_DEVICE_SOCKETS_NUM 5
- #define AT_DEVICE_NAME "uart2"
- #define AT_DEVICE_RECV_BUFF_LEN 1024
- <b>#define AT_DEVICE_WIFI_SSID "rtt" //修改为你的wifi名称和密码
- #define AT_DEVICE_WIFI_PASSWORD "123456789" </b>
- #define PKG_USING_AT_DEVICE_V160
- #define PKG_AT_DEVICE_VER_NUM 0x10600
复制代码- void get_beijing_time(char *date)
- {
- char *pr = NULL;
- char *utf8str = NULL;
- root = cJSON_Parse(date);
- if (root != NULL)
- {
- arrayItem = cJSON_GetArrayItem(root, 1);
- pr = cJSON_Print(arrayItem);
- pItem = cJSON_Parse(pr);
- if (pItem != NULL)
- {
- pSubItem = cJSON_GetObjectItem(pItem, "datetime_1");
- if (pSubItem != NULL)
- {
- utf8str = pSubItem->valuestring;
- set_rtc_time(utf8str);
- rt_kprintf("Time: %s\n", utf8str);
- }
- pSubItem = cJSON_GetObjectItem(pItem, "week_4");
- if (pSubItem != NULL)
- {
- utf8str = pSubItem->valuestring;
- memcpy(rtc_time.week, utf8str, sizeof(utf8str));
- rt_kprintf("Week: %s\n", utf8str);
- }
- cJSON_Delete(pItem);
- rt_free(pr);
- }
- cJSON_Delete(root);
- }
- }
复制代码- /*文件系统初始化,将SF块设备filesystem挂载到根目录‘/’,在根目录下创建文件'sd',将'SD卡'挂载到'sd' 目录下*/
- static int filesystem_init(void)
- {
- static struct dfs_fd p_fd = {0};
- // rt_err_t result = RT_EOK;
- fal_init();
- while (easyflash_init() != EF_NO_ERR)
- {
- };
- /* Create a block device on the file system partition of spi flash */
- struct rt_device *flash_dev = fal_blk_device_create(FS_PARTITION_NAME); //创建块设备
- if (flash_dev == NULL)
- {
- rt_kprintf("Can't create a block device on '%s' partition.\n", FS_PARTITION_NAME);
- return -1;
- }
- else
- {
- rt_kprintf("Create a block device on the %s partition of flash successful.\n", FS_PARTITION_NAME);
- }
- // result = dfs_mkfs("elm", FS_PARTITION_NAME); //在指定的挂载设备中创建文件系统
- // while(result != 0)
- // {
- // result = dfs_mkfs("elm", FS_PARTITION_NAME);
- // }
- if (dfs_mount(FS_PARTITION_NAME, "/", "elm", 0, 0) == 0) //挂载 SPIFLASH 块设备到 '/'根目录
- {
- rt_kprintf("Filesystem initialized!\n");
- }
- else
- {
- rt_kprintf("Failed to initialize filesystem!\n");
- rt_kprintf("You should create a filesystem on the block device first!\n");
- return -1;
- }
- if (dfs_file_open(&p_fd, "sd", O_DIRECTORY | O_CREAT) == 0) //创建 "sd" 目录
- {
- if (dfs_mount("sd0", "/sd", "elm", 0, 0) == 0) // 挂载tf卡到sd目录下
- {
- rt_kprintf("[TF]Filesystem initialized!\n");
- }
- else
- {
- rt_kprintf("[TF]Failed to initialize filesystem!\n");
- return -1;
- }
- }
- else
- {
- if (dfs_mount("sd0", "/sd", "elm", 0, 0) == 0)
- {
- rt_kprintf("[TF]Filesystem initialized!\n");
- }
- else
- {
- rt_kprintf("[TF]Failed to initialize filesystem!\n");
- return -1;
- }
- }
- return 0;
- }
复制代码
|