2026/1/24 13:20:23
网站建设
项目流程
制作网站要求,电商网站可以用dw做,中国工商注册网官方,推广网站出现中性产品1.概述使用文件系统存储传感器的数据。2.步骤挂载SD卡获取温湿度数据在创建SD卡中创建文件#xff0c;保存数据将异常温湿度数据保存到SD文件中3.关键步骤1.SD卡热插拔处理void FlieSystem_entry(void *parameter)
{static rt_err_t result;rt_device_t dev;while(1){dev rt_…1.概述使用文件系统存储传感器的数据。2.步骤挂载SD卡获取温湿度数据在创建SD卡中创建文件保存数据将异常温湿度数据保存到SD文件中3.关键步骤1.SD卡热插拔处理void FlieSystem_entry(void *parameter) { static rt_err_t result; rt_device_t dev; while(1) { dev rt_device_find(sd0); if (dev ! RT_NULL) { if (dfs_mount(sd0, /, elm, 0, 0) RT_EOK) { rt_kprintf(SD mount to / success\n); break; } else { rt_kprintf(SD mount to / failed\n); } } rt_thread_mdelay(500); } } static int FileSystemInit(void) { //创建sd线程 rt_thread_t thread_filesystem rt_thread_create(file_sys, FlieSystem_entry, RT_NULL, 1024, 18, 20); if (thread_filesystem ! RT_NULL) { rt_thread_startup(thread_filesystem); } } INIT_ENV_EXPORT(FileSystemInit);2.传感器数据发送使用邮箱或者消息队列3.文件读写//保存数据到SD void Sensor_DataTo_SD(char* buff) { /* 以创建和读写模式打开 /text.txt 文件如果该文件不存在则创建该文件 */ FILE *recvdata_p0; recvdata_p0 fopen(/Sensor_Data.cav, a); if (recvdata_p0 ! RT_NULL) { fputs(buff, recvdata_p0); fputs(\n, recvdata_p0); fclose(recvdata_p0); } } //从SD读取信息 void Data_ReadFSD(void) { FILE *fp; char buffer[120]; fp fopen(/Sensor_Data.cav, r); if (fp ! RT_NULL) { fread(buffer, sizeof(char), sizeof(buffer), fp); rt_kprintf(%s, buffer); fclose(fp); } } void Save_Data_TOSD(float data1, float data2) { if(data1 HIGHT_TEMPVALUE) { detect_logic.T_Count_Alarm; } else { detect_logic.T_Count_Alarm--; if(detect_logic.T_Count_Alarm 0) detect_logic.T_Count_Alarm 0; } if(detect_logic.T_Count_Alarm MAX_COUNTER) { detect_logic.T_Count_Alarm MAX_COUNTER; rt_kprintf(温度超过标准%d\n,detect_logic.T_Count_Alarm); sprintf((char*)detect_logic.Alarm_buff, Temp:%.2f,humi:%.2f, data1, data2); //拼接到温度数组里 //保存异常数据到SD卡 Sensor_DataTo_SD((char*)detect_logic.Alarm_buff); } // if(data2 HIGHT_HUMIVALUE) { detect_logic.H_Count_Alarm; } else { detect_logic.H_Count_Alarm--; if(detect_logic.H_Count_Alarm 0) detect_logic.H_Count_Alarm 0; } if(detect_logic.H_Count_Alarm MAX_COUNTER) { detect_logic.H_Count_Alarm MAX_COUNTER; rt_kprintf(湿度超过标准%d\n,detect_logic.H_Count_Alarm); sprintf((char*)detect_logic.Alarm_buff, Temp:%.2f,humi:%.2f, data1, data2); //拼接到温度数组里 //保存异常数据到SD卡 Sensor_DataTo_SD((char*)detect_logic.Alarm_buff); } }4.温度监控线程温度异常时会存储到SD卡中static void Publish_th(void *pram) { //传感器数据结构体 Sensor_msg sensor_msg; static rt_uint32_t e; static char r_buff[64]; while(1) { if (rt_event_recv(Sensor_event, EVENT_ADC_FLAG, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, e) ! RT_EOK) continue; //2000ms超时接收 --- if (rt_event_recv(Sensor_event, EVENT_TH_FLAG, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, rt_tick_from_millisecond(2000), e) RT_EOK) { //永久等待接收邮件 if(rt_mb_recv(Sensor_msg_mb, (rt_ubase_t*)sensor_msg, RT_WAITING_FOREVER) RT_EOK) { sprintf((char*)r_buff, Temp:%.2f,humi:%.2f, (float)sensor_msg-temp, (float)sensor_msg-hum); //拼接到温度数组里 } rt_kputs((char*)r_buff); rt_kputs(\n); //阈值判断逻辑 Save_Data_TOSD((float)sensor_msg-temp, (float)sensor_msg-hum); //释放内存块 rt_mp_free(sensor_msg); sensor_msg RT_NULL; continue; } //1s超时直接存数据 //阈值判断逻辑 rt_kputs(1s接收事件超时--存储数据\n); Sensor_DataTo_SD((char*)r_buff); } }