Files
VSMD/main_test.cpp
2025-06-27 10:03:05 +08:00

2650 lines
75 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include"Define.h"
#include <GSMMannager.h>
#include <HTTPClient.h>
#include <ArduinoHttpClient.h>
#include<driver/periph_ctrl.h>
#include <SoftwareSerial.h>
#include <Ticker.h>
#include <updatebyme.h>
//#include "MyWebServer.h"
#include "SDmanger.h"
//#include "HttpsOTAUpdate.h"
#include "slave.h"
#include "log.h"
#include <wifidebug.h>
#include <ArduinoJson.h>
#include <Communication_Protocol.h>
#include "IRIS_Method.h"
#include "DS18B20.h"
#include "Servo.h"
#include "jiaresi.h"
#include <Ds1302.h>
#include "servo.h"
#include "SensorIS11.h"
#include "tuigan.h"
#include "beep.h"
#include "My74HC595.h"
#include "SolarCalculator.h"
#define LOGGING
#define wb485PORT_RX 3
#define wb485PORT_TX 2
#define MY74HC595_dataPin 35
#define MY74HC595_clockPin 33
#define MY74HC595_latchPin 34
#define IS1Serial_port 1
#define IS1Serial_RX 18
#define IS1Serial_TX 17
// u_char ret[17];
// Ticker ticker;
/*
任务名Task0
任务功能:光谱数据采集
*/
TaskHandle_t Task0_Handler;
void Task0(void *pvParameters);
/*
任务名Task1
任务功能:外设控制,加热 、推杆、舵机、温度采集、时间获取
*/
TaskHandle_t Task1_Handler;
void Task1(void *pvParameters);
/*
任务名Task2
任务功能:数据上传
*/
TaskHandle_t Task2_Handler;
void Task2(void *pvParameters);
//work_mode 0:手动 1时间模式 time_mode 2高级模式 advanced_mode 3:low_power_mode
//caiji_mode 0停止 1单次 2连续 3定标 4高级模式 5回传数据 6低功耗模式
//atuo_return 0:不自动返回 1自动返回
//return_mode 设置返回模式 暂时没用
//return_data_type 详情见你懂的O.o
//time_interval 时间间隔不能等于0
//caiji_state 0 :未采集no 1采集完成finish 2采集中working
//dingbiao_time 0自动曝光 非0使用这个时长曝光
volatile u_int32_t work_mode = 0,caiji_mode = 0,return_mode = 1,atuo_return = 0,return_data_type = 0x00,time_interval = 60 * 2,caiji_state = 0 ,db_shutter,db_avn;
volatile float start_time = 9.0,stop_time = 15.30,maximum_temperature = 40,Minimum_temperature = 0,bc_b1,bc_b2,bc_b3,bc_b4;
/// @brief 高级模式参数
// advanced_direction 0:up 1:down 2:dark
// advanced_shutter_time 曝光时间
// advanced_collect_times 采集次数
// advanced_remove_dark 0:不去暗 1:去暗
volatile u_int32_t advanced_direction=0,advanced_shutter_time=0,advanced_collect_times=0,advanced_remove_dark=0;
u_int32_t timeOut = 10000;
// SoftwareSerial *wb485port;
SemaphoreHandle_t xMutexInventory = NULL; //创建信号量Handler
//json
DynamicJsonDocument doc(1024);//接收串口json
DynamicJsonDocument sys_sd_doc(1024);//读取系统json
DynamicJsonDocument ds18b20_doc(1024);//读取ds18b20 json
void json_command();
void sys_info_init();
//////ds1302时间/////////
Ds1302 rtc(0, 8, 7);
Ds1302::DateTime now;
bool sys_set_time(uint32_t year,uint32_t month,uint32_t day);
// const static char* WeekDays[] =
// {
// "Monday",
// "Tuesday",
// "Wednesday",
// "Thursday",
// "Friday",
// "Saturday",
// "Sunday"
// };
struct IS11_datastruct *IS11_datastructure;
//////is11/////////
SensorIS11 *is11Sensor;
STRSensorInfo STRSensorInfos_structure;
// SoftwareSerial *IS1Serial;
HardwareSerial *IS1Serial;
//原来
HardwareSerial wb485Serial(0);
size_t serialwrite(u_char* data,size_t lenth)
{
// return IS1Serial->write(data,lenth);
while (IS1Serial->available() > 0)
{
IS1Serial->read();
}
int rec=IS1Serial->write(data,lenth);
return rec;
}
size_t serialread(u_char *data, size_t lenth)
{
lenth=IS1Serial->available();
if (lenth<=0 )
{
/* code */
return 0;
}
int lenthofread = IS1Serial->readBytes(data,lenth);
return lenthofread;
}
////////////////////////////////AIR780EG///////////////////////////////////////////
GSMMannger *gsmmanger;
struct gps_struct{
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
float latitude;
float longitude;
};
String get_GPS(gps_struct *gps);
String getnetData();
HttpClient *http;
////////////////////////////////////////////////////////////////////////////////////
// void save_sd_ds18b20_address(uint8_t num,uint8_t *addr);
// void sd_read_set_ds18b20_address();
bool read_dingbiao(String dingbiao_path,uint8_t *dianbiao_data_buff);
void send_dingbiao(String dingbiao_path);
void dingbiao_init(String dingbiao_path);
void rm_dir_or_file(const char * dirname);
void low_power_mode(uint8_t state);
void setup()
{
//关闭光谱仪
pinMode(36,INPUT);
vTaskDelay(1000);
log_init();
// Serial.begin(115200);
// wb485Serial.begin(115200);
wb485Serial.begin(115200, SERIAL_8N1, wb485PORT_RX, wb485PORT_TX, false);
vTaskDelay(1000);
vTaskDelay(5000);
IS1Serial =new HardwareSerial(IS1Serial_port);
IS1Serial->begin(115200, SERIAL_8N1, IS1Serial_RX, IS1Serial_TX);
IS1Serial->setTimeout(1);
//初始化SD卡
sdcard::init_sdcard();
sdcard::testwriet();
sdcard::Mkdir("/guangpu_data");
sdcard::Mkdir("/up");
sdcard::Mkdir("/down");
sdcard::Mkdir("/other");
sdcard::Mkdir("/gps");
sdcard::Mkdir("/log");
sdcard::Mkdir("/dingbiao");
///
// while(1)
// {
// write_log(log_path,"hello world",10);
// if(SD_MMC.exists("/guangpu_data/0"))
// {
// rm_dir_or_file("/guangpu_data/0");
// }
// }
dingbiao_init("/dingbiao/dingbiao_up_gain.bin");
dingbiao_init("/dingbiao/dingbiao_up_offset.bin");
dingbiao_init("/dingbiao/dingbiao_down_gain.bin");
dingbiao_init("/dingbiao/dingbiao_down_offset.bin");
//检查SD卡是否有log.log文件 没有则创建
// unsigned char log_level = 10;
if(!SD_MMC.exists(log_path))
{
File file;
file = SD_MMC.open(log_path,"ab+");
file.flush();
file.close();
}
if(!SD_MMC.exists(gp_log))
{
//检查SD卡是否有log.log文件 没有则创建
File file;
file = SD_MMC.open(gp_log,"ab+");
file.flush();
file.close();
}
// 初始化DS18b20
uint8_t temp_number = DS18b20_init();
// float temp[temp_number];
// getall_temp(temp);
// while (1)
// {
// getall_temp(temp);
// for (size_t i = 0; i < temp_number; i++)
// {
// write_log(log_path,"temp " + String(i) + ": " + String(temp[i]),10);
// }
// vTaskDelay(1000 * 2);
// }
// sd_read_set_ds18b20_address();
//初始化舵机
servo_init(21,0);
//初始化蜂鸣器
beep_init(6,2000,12);
// while (1)
// {
// servo_set_angle(120);
// vTaskDelay(1000 * 1.5);
// servo_set_angle(0);
// beep_run(2000,1000);
// vTaskDelay(1000 * 3);
// beep_stop();
// }
// while(1)
// {
// beep_run(2000,1000);
// vTaskDelay(1000 * 3);
// beep_stop();
// vTaskDelay(1000 * 3);
// }
//初始化时间
rtc.init();
// now.year = 24;
// now.month = 5;
// now.day = 21;
// now.hour = 13;
// now.minute = 45;
// now.second = 0;
// now.dow = Ds1302::DOW_WED;
// rtc.setDateTime(&now);
rtc.getDateTime(&now);
//初始化74hc595
my74hc595_init();
///////////////////////////加热测试////////////////////////////////////
// while(1)
// {
// write_log(log_path,"start jiaresi",10);
// jiaresi(0,start_jiare);
// jiaresi(1,start_jiare);
// jiaresi(2,start_jiare);
// jiaresi(3,start_jiare);
// jiaresi(4,start_jiare);
// jiaresi(5,start_jiare);
// tuigan(tui);
// vTaskDelay(1000 * 15);
// write_log(log_path,"stop jiaresi",10);
// jiaresi(0,start_jiare);
// jiaresi(1,stop_jiare);
// jiaresi(2,stop_jiare);
// jiaresi(3,stop_jiare);
// jiaresi(4,stop_jiare);
// jiaresi(5,stop_jiare);
// tuigan(suo);
// vTaskDelay(1000 * 15);
// }
///////////////////////////加热测试////////////////////////////////////
///////////////////////////推杆测试/////////////////////////////////////
// uint32_t x = 0;
// float n = 5;
// uint32_t data_length;
// uint8_t read_buf[100];
// while (1)
// {
// while(wb485Serial.available())
// {
// data_length += wb485Serial.readBytes(&read_buf[data_length],100);
// for (uint32_t i = 0; i < 5000; i++)
// {
// if(wb485Serial.available() > 0)
// {
// break;
// }
// }
// }
// //如果接收到数据
// if (data_length > 0)
// {
// if(read_buf[0] == 'n')
// {
// //将转换为数字
// n = atof((const char *) (read_buf+1));
// if(n<5) n = 5;
// }
// if(read_buf[0] == 'H')
// {
// wb485Serial.println("n = " + String(n));
// }
// memset(read_buf, 0, sizeof(read_buf));
// data_length = 0;
// }
// if(x == 1)
// {
// wb485Serial.println("start tuigan tui");
// tuigan(tui);
// }
// else if(x == 1000 *n)
// {
// wb485Serial.println("start tuigan suo");
// tuigan(suo);
// }
// else if(x == 1000 * 2 * n)
// {
// x = 0;
// }
// x++;
// vTaskDelay(1);
// }
///////////////////////////推杆测试/////////////////////////////////////
// //初始化AIR780EG
gsmmanger = new GSMMannger(2, 19, 20);
http = new HttpClient(*gsmmanger->client, "82.156.1.111");
String Date = getnetData();
write_log(log_path,"date is :"+Date,10);
// while(1)
// {
// String Date = getnetData();
// write_log(log_path,"date is :"+Date,10);
// vTaskDelay(1000);
// }
// //初始化AIR780EG
// gsmmanger = new GSMMannger();
// //获取GPS
gps_struct gps_structure;
String gpsbac = get_GPS(&gps_structure);
//计算日出日落
double transit, sunrise, sunset;
double utc_offset = 8;
// int i=0;
// while(1)
// {
// gpsbac = get_GPS(&gps_structure);
// write_log(log_path,String(i)+"Getting GPS " + gpsbac,10);
// vTaskDelay(1000);
// i++;
// if (gpsbac != "-1")
// {
// calcSunriseSunset(now.year+2000, now.month, now.day,gps_structure.latitude, gps_structure.longitude, transit, sunrise, sunset);
// write_log(log_path,"sunrise: " + String(sunrise),10);
// write_log(log_path,"sunset: " + String(sunset),10);
// write_log(log_path,"transit: " + String(transit),10);
// write_log(log_path,"latitude: " + String(gps_structure.latitude),10);
// write_log(log_path,"longitude: " + String(gps_structure.longitude),10);
// write_log(log_path,"gps_date: " + gpsbac,10);
// }
// }
if (gpsbac != "-1")
{
calcSunriseSunset(now.year+2000, now.month, now.day,gps_structure.latitude, gps_structure.longitude, transit, sunrise, sunset);
}
else
{
write_log(log_path,"no gps",10);
}
//开启光谱仪
pinMode(36,OUTPUT);
digitalWrite(36,LOW);
vTaskDelay(1000 * 2);
InitFunction(serialwrite,serialread);
is11Sensor = new SensorIS11();
STRSensorInfos_structure = is11Sensor->initSensor();
// while(1)
// {
// is11Sensor->SetShutter(2);
// vTaskDelay(1000);
// is11Sensor->SetShutter(1);
// vTaskDelay(1000);
// }
// 删除原来SD卡的系统信息
sys_info_init();
servo_set_angle(120);
vTaskDelay(1000 * 1.5);
servo_set_angle(0);
vTaskDelay(1000 * 1.5);
beep_run(2000,1000);
vTaskDelay(1000 * 1.5);
beep_stop();
// sys_sd_doc["is_spacial"] = "yes";
// deserializeJson(sys_sd_doc,system_info);
// while (1)
// {
// }
xMutexInventory = xSemaphoreCreateMutex(); //创建MUTEX
if (xMutexInventory == NULL) {
} else{
//创建并启动Core1的任务 xTaskCreatePinnedToCore
xTaskCreatePinnedToCore(
Task0, /* 任务函数 */
"Task0", /* 任务名称 */
1024 * 50, /* 栈大小 */
NULL, /* 任务参数 */
2, /* 任务优先级 */
&Task0_Handler, /* 任务句柄 */
0); /* Core 0 */
xTaskCreatePinnedToCore(
Task1, /* 任务函数 */
"Task1", /* 任务名称 */
1024 * 5, /* 栈大小 */
NULL, /* 任务参数 */
1, /* 任务优先级 */
&Task1_Handler, /* 任务句柄 */
0);
//创建并启动Core0的任务
xTaskCreatePinnedToCore(
Task2, /* 任务函数 */
"Task2", /* 任务名称 */
1024 * 30, /* 栈大小 */
NULL, /* 任务参数 */
20, /* 任务优先级 */
&Task2_Handler, /* 任务句柄 */
1);
}
// write_log(log_path,"setup ok",log_level);
// beep_run(2000,512);
// vTaskDelay(1000 * 3);
// beep_stop();
}
void loop()
{
}
void Task0(void *pvParameters)
{
vTaskDelay(1);
write_log(log_path,"task 0",10);
uint32_t uint_work_task0 = 100;
while (1)
{
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
if(uint_work_task0 == 100 && caiji_mode != 2)
{
caiji_mode = 0;
uint_work_task0 = 0;
}
if (caiji_state == 2)
{
caiji_state = 1;
}
uint_work_task0 = caiji_mode;
}
xSemaphoreGive(xMutexInventory);
//caiji_mode 0停止 1单次 2连续 3定标 4定标 5回传数据
switch (uint_work_task0)
{
case 0:
break;
case 1:
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
caiji_state = 2;
}
xSemaphoreGive(xMutexInventory);
is11Sensor->TakeOneJob(false);
if (atuo_return == 1)
{
is11Sensor->senddata(&wb485Serial,return_data_type);
}
uint_work_task0 = 100;
break;
case 2:
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
caiji_state = 2;
}
xSemaphoreGive(xMutexInventory);
is11Sensor->TakeOneJob(false);
if (atuo_return == 1)
{
is11Sensor->senddata(&wb485Serial,return_data_type);
}
vTaskDelay(1000 * time_interval);
break;
case 3:
is11Sensor->senddata(&wb485Serial,return_data_type);
uint_work_task0 = 100;
break;
case 4:
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
caiji_state = 2;
}
xSemaphoreGive(xMutexInventory);
is11Sensor->advanced_mode(advanced_direction,advanced_shutter_time,advanced_collect_times,advanced_remove_dark);
uint_work_task0 = 100;
break;
case 5:
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
caiji_state = 2;
}
xSemaphoreGive(xMutexInventory);
is11Sensor->opt(advanced_direction);
uint_work_task0 = 100;
break;
default:
break;
}
vTaskDelay(10);
}
}
//Task1的实现
void Task1(void *pvParameters)
{
vTaskDelay(10);
write_log(log_path,"task 1",10);
while(1)
{
// vTaskDelay(1000);
// //获取时间
// rtc.getDateTime(&now);
// //获取温度
// // float temp[8];
// // getall_temp(temp);
// // //平均温度
// // float temp_ave = 0;
// // for (size_t i = 0; i < 8; i++)
// // {
// // temp_ave += temp[i];
// // }
// // temp_ave = temp_ave / 8;
// // write_log(log_path,"temp_ave: " + String(temp_ave),log_level);
// //获取GPS
// gps_struct gps_structure;
// String gpsbac = get_GPS(&gps_structure);
// //计算日出日落
// double transit, sunrise, sunset;
// double utc_offset = 8;
// if (gpsbac != "-1")
// {
// calcSunriseSunset(now.year+2000, now.month, now.day,gps_structure.latitude, gps_structure.longitude, transit, sunrise, sunset);
// }
// else
// {
// write_log(log_path,"no gps",10);
// }
// //日出日落控制 太阳升起前推杆缩,太阳落下后推杆伸
// write_log(log_path,"now.hour: " + String(now.hour),log_level);
// write_log(log_path,"sunrise: " + String((int)sunrise),log_level);
// write_log(log_path,"sunset: " + String((int)sunset),log_level);
// if (now.hour+1 == (int)sunrise)
// {
// tuigan(suo);
// }
// else if (now.hour+1 >= (int)sunset)
// {
// tuigan(tui);
// }
// if(sys_sd_doc["work_mode"] == "time_mode")
// {
// float now_time = now.hour + now.minute/100;
// if(now_time > start_time && now_time < stop_time)
// {
// }
// else
// {
// if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
// {
// caiji_mode = 0;
// }
// xSemaphoreGive(xMutexInventory);
// }
// }
// write_log(log_path,"temp_ave: " + String(temp_ave),log_level);
// if(temp_ave < Minimum_temperature)
// {
// write_log(log_path,"start jiaresi",10);
// jiaresi(5,start_jiare);
// vTaskDelay(1000 * 10);
// }
// else if (temp_ave > Minimum_temperature + 5)
// {
// write_log(log_path,"stop jiaresi",10);
// jiaresi(5,stop_jiare);
// }
// for(int ab ; ab < 10; ab++)
// {
rtc.getDateTime(&now);
// String path = "/guangpu_data/"+ String(now.year) + "/" + String(now.month) + "/" + String(now.day);
// if(!SD_MMC.exists(log_path))
//////////////////////////////////////////////////////////////////////////////////////////////////////////
double cardSize = SD_MMC.cardSize() / (1024 * 1024);
double used_size = SD_MMC.usedBytes() / (1024 * 1024);
float used_percent = used_size / cardSize;
write_log(log_path,"used_percent: " + String(used_percent),10);
//数据清除规则:1、满十年清除第一年数据 2、当数据>90%时删除最前一个月数据
if(used_percent >= 0.8)
{
if (used_percent >= 0.9)
{
//删除文件
String path_b = "/gaugpu_data";
for(int i=24;i<255 ;i++)
{
for (uint8_t j = 1; j < 13; i++)
{
String path_a = path_b + "/" +String(i)+ "/" +String(j);
if(SD_MMC.exists(path_a))
{
rm_dir_or_file(path_a.c_str());
}
}
}
}
//报警
write_log(log_path,"sdcard will full," + String(used_percent * 100) + "%" +"used.",10);
}
if(SD_MMC.exists("/guangpu_data/"+ String(now.year - 10) ))
{
String path = "/guangpu_data/"+ String(now.year - 10);
rm_dir_or_file(path.c_str());
}
// write_log(log_path,"delete /guangpu_data/0 1111111111",10);
// if(SD_MMC.exists("/guangpu_data/0"))
// {
// write_log(log_path,"delete /guangpu_data/0 2222222222222222",10);
// // sdcard::deleteFolderOrFile("/gaugpu_data/0");
// rm_dir_or_file("/guangpu_data/0");
// }
///////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////时间////////////////////////////////////////////////////////////
//获取RTC时间
rtc.getDateTime(&now);
// 获取网络时间
gps_struct net_structure;
String net_date = getnetData();
write_log(log_path,"net_date is :"+net_date,10);
// 2024-07-12 07:12:45
//截取时间
if(net_date != "-1")
{
net_structure.year = net_date.substring(0,4).toInt() - 2000;
net_structure.month = net_date.substring(5,7).toInt();
net_structure.day = net_date.substring(8,10).toInt();
net_structure.hour = net_date.substring(11,13).toInt();
net_structure.minute = net_date.substring(14,16).toInt();
net_structure.second = net_date.substring(17,-1).toInt();
if(now.year != net_structure.year || now.month != net_structure.month || now.day != net_structure.day || now.hour - net_structure.hour || (fabs(now.minute - net_structure.minute)>5 ))
{
now.year = net_structure.year;
now.month = net_structure.month;
now.day = net_structure.day;
now.hour = net_structure.hour;
now.minute = net_structure.minute;
now.second = net_structure.second;
rtc.setDateTime(&now);
}
}
////获取GPS
gps_struct gps_structure;
String gpsbac = get_GPS(&gps_structure);
if(net_date != "-1" && gpsbac != "-1")
{
gps_structure.year = gps_structure.year - 2000;
if(now.year != gps_structure.year || now.month != gps_structure.month || now.day != gps_structure.day || now.hour != gps_structure.hour || (fabs(now.minute - net_structure.minute)>5 ))
{
now.year = gps_structure.year;
now.month = gps_structure.month;
now.day = gps_structure.day;
now.hour = gps_structure.hour;
now.minute = gps_structure.minute;
now.second = gps_structure.second;
rtc.setDateTime(&now);
}else write_log(log_path,"no gps",10);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//获取时间
rtc.getDateTime(&now);
if(sys_sd_doc["work_mode"] == "time_mode")
{
float now_time = now.hour + now.minute/100;
if(now_time > start_time && now_time < stop_time)
{
}
else
{
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
caiji_mode = 0;
}
xSemaphoreGive(xMutexInventory);
}
}
// sdcard::Mkdir(path);
float temp4 = getone_temp(4);
float temp6 = getone_temp(6);
write_log(log_path,"temp4 : " + String(temp4),10);
write_log(log_path,"temp6 : " + String(temp6),10);
if((temp4+temp6)/2 < 0)
{
write_log(log_path,"start jiaresi",10);
jiaresi(5,start_jiare);
vTaskDelay(1000 * 10);
}
else if ((temp4+temp6)/2 > 5)
{
write_log(log_path,"stop jiaresi",10);
jiaresi(5,stop_jiare);
}
vTaskDelay(1000 * 10);
}
}
// Task2的实现
void Task2(void *pvParameters)
{
vTaskDelay(20);
write_log(log_path,"task 2",10);
unsigned char read_buf[1024*10];
unsigned char command_data[1024 * 10];
unsigned char data_type;
String send_data ;
int send_lenth;
u_char send_buff[300];
while(1)
{
unsigned short data_length = 0;
//监测接收串口数据
while(wb485Serial.available())
{
data_length += wb485Serial.readBytes(&read_buf[data_length],1024*10);
for (uint32_t i = 0; i < 5000; i++)
{
if(wb485Serial.available() > 0)
{
break;
}
}
}
//如果接收到数据
if (data_length > 0)
{
// 测试数据
write_log(log_path,"data_length: " + String(data_length),log_level);
data_length = IRIS_Cut_Befor_Header(read_buf,data_length);
if (data_length < 0)
{
send_data = "send data error";
write_log(log_path,send_data,log_level);
send_lenth = IRIS_Protocol_Pack(0x01,(uint16_t)send_data.length(), (uint8_t *)send_data.c_str(),send_buff);
wb485Serial.write(send_buff,send_lenth);
// return;
}
int ret = IRIS_STM32_Protocol_Unpack(read_buf,data_length,&data_type,command_data);
write_log(log_path,"ret:" +String(ret),log_level);
if (ret > 0)
{
write_log(log_path,"data_type:" +String(data_type),log_level);
if(data_type == 0x00)//json
{
deserializeJson(doc,command_data);
write_log(log_path,"start json_command",log_level);
json_command();
doc.clear();
}
else if (data_type == 0x01)//String
{
// write_log(command_data,0);
}
else if (data_type == 0x03) //hex
{
write_log(log_path,"",log_level);
String dingbiao_path;
if (command_data[0] == 4 || command_data[0] == 5)
{
// is11Sensor->save_dingbiao(command_data);
//保存到sd卡
if(command_data[0] == 4)
{
if(command_data[1] == 0) dingbiao_path = "/dingbiao/dingbiao_up_gain.bin";
else if(command_data[1] == 1) dingbiao_path = "/dingbiao/dingbiao_up_offset.bin";
}
else if(command_data[0] == 5)
{
if(command_data[1] == 0) dingbiao_path = "/dingbiao/dingbiao_down_gain.bin";
else if(command_data[1] == 1) dingbiao_path = "/dingbiao/dingbiao_down_offset.bin";
}
is11Sensor->save_dingbiao(command_data);
File file = SD_MMC.open(dingbiao_path, "wb");
file.write((uint8_t *)&command_data, ret);
file.flush();
file.close();
}
}
else if(data_type == 0x04)
{
uint8_t num = command_data[0];
set_ds18b20_address(num,command_data+1);
}
send_data = "wb485 success";
write_log(log_path,send_data,log_level);
// send_lenth = IRIS_Protocol_Pack(0x01,(uint16_t)send_data.length(), (uint8_t *)send_data.c_str(),send_buff);
// wb485Serial.write(send_buff,send_lenth);
}
else
{
send_data = "send data error";
write_log(log_path,send_data,log_level);
send_lenth = IRIS_Protocol_Pack(0x01,(uint16_t)send_data.length(), (uint8_t *)send_data.c_str(),send_buff);
wb485Serial.write(send_buff,send_lenth);
}
memset(read_buf, 0, sizeof(read_buf));
memset(command_data, 0, sizeof(command_data));
}
// vTaskDelay(1);
}
}
/*
//处理json命令
command : 1、get_sensor_info
2、set_sensor_info
3、set_work_mode
4、get_work_mode
5、set_time_interval
6、start_work
7、stop_work
8、set_return_mode
9、set_atuo_return
10、set_return_data_type
11、get_9
12、
13、get_data
14、set_bochangxishu
15、get_bochangxishu
16、get_chongcaiyangbochang
18、get_darkcurrent
19、set_servo_offset
20、set_start_time
21、set_stop_time
22、set_maximum_temperature
23、set_Minimum_temperature
24、
*/
/*{"command":"","name":"gaoguangpu","version":"v2.0","SN":"123456","date":"","caiji_mode":"","time_interval":"","return_data_type":"","bochangxishu":""}*/
void json_command()
{
int ret;
bool save = false;
String send_str;
u_char send_buff[1000];
if(xSemaphoreTake(xMutexInventory, timeOut) == pdPASS)
{
//command 1
if (doc["command"] == "get_sensor_info")
{
rtc.getDateTime(&now);
sys_sd_doc["date"] = String(now.year+2000) + "-" + String(now.month) + "-" + String(now.day) + " " + String(now.hour) + ":" + String(now.minute) + ":" + String(now.second);
send_str = "";
serializeJson(sys_sd_doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
serializeJson(sys_sd_doc, send_str);
wb485Serial.write(send_buff, ret);
}
//command 2
else if (doc["command"] == "set_sensor_info")
{
write_log(log_path,"set_sensor_info",log_level);
if(doc["name"] == NULL)
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "Name cannot be null";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
save = true ;
sys_sd_doc["name"] = doc["name"].as<String>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
if(doc["version"] == NULL)
{
}
else
{
save = true ;
sys_sd_doc["version"] = doc["version"].as<String>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 3
else if (doc["command"] == "set_work_mode")
{
if(doc["work_mode"] == "manual_mode")
{
if(sys_sd_doc["work_mode"]=="low_power_mode") low_power_mode(1);
save = true ;
sys_sd_doc["work_mode"] = "manual_mode";
sys_sd_doc["caiji_mode"] = "single";
sys_sd_doc["atuo_return"] ="no";
sys_sd_doc["return_data_type"] = 0x00;
work_mode = 0;
caiji_mode = 0;
atuo_return = 0;
return_data_type = 0x00;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if (doc["work_mode"] == "time_mode")
{
if(sys_sd_doc["work_mode"]=="low_power_mode") low_power_mode(1);
save = true;
sys_sd_doc["work_mode"] = "time_mode";
sys_sd_doc["caiji_mode"] = "continue";
sys_sd_doc["atuo_return"] = "yes";
sys_sd_doc["return_data_type"] = 0x00;
work_mode = 1;
caiji_mode = 0;
atuo_return = 1;
return_data_type = 0x00;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if(doc["work_mode"] == "advanced_mode")
{
if(sys_sd_doc["work_mode"]=="low_power_mode") low_power_mode(1);
save = true;
sys_sd_doc["work_mode"] = "advanced_mode";
sys_sd_doc["caiji_mode"] = "advanced";
sys_sd_doc["atuo_return"] = "no";
sys_sd_doc["return_data_type"] = 0x00;
work_mode = 2;
caiji_mode = 0;
atuo_return = 0;
return_data_type = 0x00;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if(doc["work_mode"] == "low_power_mode")
{
save = true;
sys_sd_doc["work_mode"] = "low_power_mode";
sys_sd_doc["caiji_mode"] = "low_power";
sys_sd_doc["atuo_return"] = "no";
sys_sd_doc["return_data_type"] = 0x00;
work_mode = 3;
low_power_mode(0);
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "work mode error";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 4.1
else if (doc["command"] == "set_caiji_mode")
{
if(doc["caiji_mode"] == "start")
{
if(sys_sd_doc["caiji_mode"]=="continue") caiji_mode = 2;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if(doc["caiji_mode"] == "stop")
{
if(sys_sd_doc["caiji_mode"]=="continue") caiji_mode = 0;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if(doc["caiji_mode"] == "single")
{
save = true;
sys_sd_doc["caiji_mode"] = doc["caiji_mode"].as<String>();
caiji_mode = 1;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if(doc["caiji_mode"] == "continue")
{
save = true;
sys_sd_doc["caiji_mode"] = doc["caiji_mode"].as<String>();
caiji_mode = 2;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "work mode error";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 4.2
else if (doc["command"] == "take_one_job")
{
if(caiji_mode == 0)
{
caiji_mode = 1;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "Working";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 4.3
else if (doc["command"] == "set_time_interval")
{
if (doc["time_interval"]>0)
{
save = true;
sys_sd_doc["time_interval"] = doc["time_interval"];
time_interval = doc["time_interval"];
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "time_interval error";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 5
else if (doc["command"] == "get_work_mode")
{
doc.clear();
send_str = "";
doc["work_mode"] = sys_sd_doc["work_mode"].as<String>();
doc["caiji_mode"] = sys_sd_doc["caiji_mode"].as<String>();
doc["atuo_return"] = sys_sd_doc["atuo_return"].as<String>();
doc["return_data_type"] =sys_sd_doc["return_data_type"];
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
//command 6
else if(doc["command"] == "set_atuo_return")
{
if(doc["atuo_return"] == "yes")
{
save = true;
sys_sd_doc["atuo_return"] = doc["atuo_return"].as<String>();
atuo_return = 1;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else if (doc["atuo_return"] == "no")
{
save = true;
sys_sd_doc["atuo_return"] = doc["atuo_return"].as<String>();
atuo_return = 0;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "atuo_return error";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 7
else if (doc["command"] == "set_return_data_type")
{
u_int8_t a = 0;
u_int32_t b = doc["return_data_type"];
switch (b)
{
case 0x00:
a=1;
break;
case 0x01:
a=1;
break;
case 0x02:
a=1;
break;
case 0x03:
a=1;
break;
case 0x04:
a=1;
break;
case 0x05:
a=1;
break;
case 0x10:
a=1;
break;
case 0x11:
a=1;
break;
case 0x12:
a=1;
break;
case 0x13:
a=1;
break;
default:
break;
}
if(a)
{
save = true;
sys_sd_doc["return_data_type"] = doc["return_data_type"];
return_data_type = doc["return_data_type"];
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "return_data_type error";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 8
//保留,没用
else if (doc["command"] == "set_return_mode")
{
save = true;
sys_sd_doc["return_mode"] = doc["return_mode"].as<String>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
/*设置回传模式 */
}
//command 9
else if (doc["command"] == "get_data")
{
u_int8_t a = 0;
u_int32_t b = doc["return_data_type"];
switch (b)
{
case 0x00:
a=1;
break;
case 0x01:
a=1;
break;
case 0x02:
a=1;
break;
case 0x03:
a=1;
break;
case 0x04:
a=1;
break;
case 0x05:
a=1;
break;
case 0x06:
a=1;
break;
case 0x10:
a=1;
break;
case 0x11:
a=1;
break;
case 0x12:
a=1;
break;
case 0x13:
a=1;
break;
default:
break;
}
if(a && caiji_mode !=3)
{
return_data_type = doc["return_data_type"];
caiji_mode = 3;
}
else
{
send_str = "";
doc["caiji_state"] = "working";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
/* code */
}
//command 10
else if (doc["command"] == "set_bochangxishu")
{
float b1=0,b2=0,b3=0,b4=0;
b1 = doc["bochangxishu"]["b0"].as<float>();
b2 = doc["bochangxishu"]["b1"].as<float>();
b3 = doc["bochangxishu"]["b2"].as<float>();
b4 = doc["bochangxishu"]["b3"].as<float>();
if(b1!=0 && b2 !=0 && b3 != 0 && b4 != 0)
{
save = true;
bc_b1 = doc["bochangxishu"]["b0"].as<float>();
bc_b2 = doc["bochangxishu"]["b1"].as<float>();
bc_b3 = doc["bochangxishu"]["b2"].as<float>();
bc_b4 = doc["bochangxishu"]["b3"].as<float>();
sys_sd_doc["bochangxishu"]["b0"] = doc["bochangxishu"]["b0"].as<float>();
sys_sd_doc["bochangxishu"]["b1"] = doc["bochangxishu"]["b1"].as<float>();
sys_sd_doc["bochangxishu"]["b2"] = doc["bochangxishu"]["b2"].as<float>();
sys_sd_doc["bochangxishu"]["b3"] = doc["bochangxishu"]["b3"].as<float>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "bochangxishu error or null";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 11
else if (doc["command"] == "get_bochangxishu")
{
doc.clear();
doc["bochangxishu"]["a0"] = sys_sd_doc["bochangxishu"]["a0"].as<float>();
doc["bochangxishu"]["a1"] = sys_sd_doc["bochangxishu"]["a1"].as<float>();
doc["bochangxishu"]["a2"] = sys_sd_doc["bochangxishu"]["a2"].as<float>();
doc["bochangxishu"]["a3"] = sys_sd_doc["bochangxishu"]["a3"].as<float>();
doc["bochangxishu"]["b0"] = sys_sd_doc["bochangxishu"]["b0"].as<float>();
doc["bochangxishu"]["b1"] = sys_sd_doc["bochangxishu"]["b1"].as<float>();
doc["bochangxishu"]["b2"] = sys_sd_doc["bochangxishu"]["b2"].as<float>();
doc["bochangxishu"]["b3"] = sys_sd_doc["bochangxishu"]["b3"].as<float>();
send_str = "";
doc["state"] = "ok";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
//command 12
else if (doc["command"] == "get_chongcaiyangbochang")
{
// String chongcaiyangbochang;
/* code */
}
//command 14
else if(doc["command"] == "set_servo_offset")
{
float angle = doc["servo_offset_angle"];
if(angle > 0 || angle < 180)
{
save = true;
sys_sd_doc["servo_offset_angle"] = doc["servo_offset_angle"].as<float>();
servo_offset(angle);
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "servo_offset_angle error or out of range";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 15
else if(doc["command"] == "set_start_time")
{
float t = doc["start_time"].as<float>();
if(t>0 && t < 24)
{
save = true;
sys_sd_doc["start_time"] = doc["start_time"].as<float>();
start_time = doc["start_time"].as<float>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "start_time error or out of range";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 16
else if(doc["command"] == "set_stop_time")
{
float tt = doc["stop_time"].as<float>();
if(tt>0 && tt < 24 && tt > start_time)
{
save = true;
sys_sd_doc["stop_time"] = doc["stop_time"].as<float>();
stop_time = doc["stop_time"];
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "stop_time error or out of range";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 17
else if(doc["command"] == "set_maximum_temperature")
{
float te = doc["maximum_temperature"].as<float>();
if(te < 100)
{
save = true;
maximum_temperature = doc["maximum_temperature"].as<float>();
sys_sd_doc["maximum_temperature"] = doc["maximum_temperature"].as<float>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "maximum_temperature error or out of range";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 18
else if(doc["command"] == "set_Minimum_temperature")
{
float tte = doc["Minimum_temperature"].as<float>();
if(tte < maximum_temperature)
{
save = true;
maximum_temperature = doc["Minimum_temperature"].as<float>();
sys_sd_doc["Minimum_temperature"] = doc["Minimum_temperature"].as<float>();
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "Minimum_temperature error or out of range";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 19
else if(doc["command"] == "get_date")
{
send_str = "";
doc.clear();
rtc.getDateTime(&now);
doc["state"] = "ok";
doc["date"]["year"]= now.year;
doc["date"]["month"]= now.month;
doc["date"]["day"]= now.day;
doc["date"]["hour"]= now.hour;
doc["date"]["minute"]= now.minute;
doc["date"]["second"]= now.second;
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
//command 20
else if(doc["command"] == "get_caiji_state")
{
uint32_t percent;
send_str = "";
doc.clear();
if(caiji_state == 1)
{
doc["caiji_state"] = "finish";
percent = is11Sensor->work_progress;
doc["percent"] = percent;
doc["info"] = "end";
}
else if(caiji_state == 2 )
{
doc["caiji_state"] = "working";
percent = is11Sensor->work_progress;
doc["percent"] = percent;
if(percent < 100)
{
doc["info"] = "working";
}
else
{
doc["info"] = "end";
}
}
else doc["caiji_state"] = "no";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
//command 21
else if(doc["command"] == "start_opt")
{
if(sys_sd_doc["work_mode"] == "advanced_mode")
{
caiji_mode = 5;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "The working mode is not advanced_mode";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 22
else if(doc["command"] == "get_opt")
{
if(sys_sd_doc["work_mode"] == "advanced_mode")
{
send_str = "";
uint32_t aa = is11Sensor->dingbiao_shutter;
doc["opt"] = aa;
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "The working mode is not advanced_mode";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
else if(doc["command"] == "start_collect")
{
bool collect = true;
if(sys_sd_doc["work_mode"] == "advanced_mode")
{
// caiji_mode = 3;
if (doc["direction"] == "up")
{
advanced_direction = 0;
}
else if (doc["direction"] == "down")
{
advanced_direction = 1;
}
else if (doc["direction"] == "dark")
{
advanced_direction = 2;
}
else
{
collect = false;
// send_str = "";
// doc["state"] = "failed";
// doc["info"] = "direction error";
// serializeJson(doc, send_str);
// ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
// wb485Serial.write(send_buff, ret);
}
if(doc["shutter_time"]>=1)
{
advanced_shutter_time = doc["shutter_time"];
}
else
{
collect = false;
// send_str = "";
// doc["state"] = "failed";
// doc["info"] = "shutter_time error";
// serializeJson(doc, send_str);
// ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
// wb485Serial.write(send_buff, ret);
}
if(doc["collect_times"]>0)
{
advanced_collect_times = doc["collect_times"];
}
else
{
collect = false;
// send_str = "";
// doc["state"] = "failed";
// doc["info"] = "collect_times error";
// serializeJson(doc, send_str);
// ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
// wb485Serial.write(send_buff, ret);
}
if(doc["remove_dark"] == "yes")
{
advanced_remove_dark = 1;
}
else if(doc["remove_dark"] == "no")
{
advanced_remove_dark = 0;
}
else
{
collect = false;
// send_str = "";
// doc["state"] = "failed";
// doc["info"] = "remove_dark error";
// serializeJson(doc, send_str);
// ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
// wb485Serial.write(send_buff, ret);
}
if (collect)
{
caiji_mode = 4;
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "parameter error";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "The working mode is not advanced_mode";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
//command 25
else if(doc["command"] == "set_sys_time")
{
uint32_t year,month,day,hour,minute,second;
year = doc["year"];
month = doc["month"];
day = doc["day"];
hour = doc["hour"];
minute = doc["minute"];
second = doc["second"];
write_log(log_path,"year" + String(year) + "month" + String(month) + "day" + String(day) + "hour" + String(hour) + "minute" + String(minute) + "second" + String(second),10);
if(year>99 || month>12 || day>31 || hour > 23 || minute >59 || second > 59)
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "date error1";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
if(sys_set_time(year,month,day))
{
now.year = year;
now.month = month;
now.day = day;
now.hour = hour;
now.minute =minute;
now.second =second;
// now.dow = 5;
rtc.setDateTime(&now);
send_str = "";
doc["state"] = "success";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "date error2";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
}
}
//command 26
// else if(doc["command"] == "set_ds18b20_address")
// {
// uint8_t num = doc["num"];
// uint8_t addr[8];
// if (num>=0 && num<8)
// {
// addr[0] = doc["addr"]["0"];
// addr[1] = doc["addr"]["1"];
// addr[2] = doc["addr"]["2"];
// addr[3] = doc["addr"]["3"];
// addr[4] = doc["addr"]["4"];
// addr[5] = doc["addr"]["5"];
// addr[6] = doc["addr"]["6"];
// addr[7] = doc["addr"]["7"];
// set_ds18b20_address(num, addr);
// save_sd_ds18b20_address(num,addr);
// send_str = "";
// doc["state"] = "success";
// serializeJson(doc, send_str);
// ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
// wb485Serial.write(send_buff, ret);
// }
// else
// {
// send_str = "";
// doc["state"] = "failed";
// doc["info"] = "num error";
// serializeJson(doc, send_str);
// ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
// wb485Serial.write(send_buff, ret);
// }
// }
else if(doc["command"] == "get_dingbiao")
{
send_dingbiao("/dingbiao/dingbiao_up_gain.bin");
send_dingbiao("/dingbiao/dingbiao_up_offset.bin");
send_dingbiao("/dingbiao/dingbiao_down_gain.bin");
send_dingbiao("/dingbiao/dingbiao_down_offset.bin");
}
//command error
else
{
send_str = "";
doc["state"] = "failed";
doc["info"] = "no command";
serializeJson(doc, send_str);
ret = IRIS_Protocol_Pack(0x00,(uint16_t)send_str.length(), (uint8_t *)send_str.c_str(),send_buff);
wb485Serial.write(send_buff, ret);
}
//将修改后的系统信息写入内存卡
if(save == true)
{
send_str = "";
serializeJson(sys_sd_doc, send_str);
File file;
file = SD_MMC.open("/system_info.json","w+");
file.println(send_str);
file.flush();
file.close();
}
}
xSemaphoreGive(xMutexInventory);
}
String get_GPS(gps_struct *gps)
{
write_log(log_path,"start get GPS ",10);
String gpsbac,Date,temp,Latitude,Longitude;
gsmmanger->modem->sendAT(GF("+CGNSPWR?"));
gsmmanger->modem->waitResponse("OK");
gsmmanger->modem->sendAT(GF("+CGNSPWR=1"));
gsmmanger->modem->waitResponse("OK");
gsmmanger->modem->sendAT(GF("+CGNSAID=31,1,1,1"));
gsmmanger->modem->waitResponse("OK");
gsmmanger->modem->sendAT(GF("+CGNSINF"));
//获取gps信息
gsmmanger->modem->waitResponse(5000,gpsbac);
write_log(log_path,"gpsbac is " + gpsbac,10);
//检测是否有效
temp = gpsbac.substring(16,17);
// write_log(log_path,"hahaha :" + temp,10);
if(temp != "1")
{
// write_log(log_path,"gps error,hahahaha",10);
return "-1";
}
//截取时间
Date = gpsbac.substring(18,32);
temp = Date.substring(0,4) + "-" + Date.substring(4,6) + "-" +Date.substring(6,8) + " " + Date.substring(8,10) + ":" +Date.substring(10,12) + ":" +Date.substring(12,-1);
gps->year = Date.substring(0,4).toInt();
gps->month = Date.substring(4,6).toInt();
gps->day = Date.substring(6,8).toInt();
gps->hour = Date.substring(8,10).toInt();
gps->minute = Date.substring(10,12).toInt();
gps->second = Date.substring(12,-1).toInt();
Date = temp;
// +CGNSINF: 1,1,20240430052525,40.040938,116.328013,51.900,0.26,0.00,3,,2.14,2.42,4.00,,10,8,,,34,,
// OK
////////获取经纬度//////////
temp = gpsbac.substring(33);
// write_log(log_path,"Longitude is :" + temp,10);
int pos = temp.indexOf(",");
Latitude = temp.substring(0,pos);
gps->latitude = Latitude.toFloat();
// write_log(log_path,"Latitude ::::" + Latitude,10);
temp = temp.substring(pos+1);
// write_log(log_path,"Longitude is :" + temp,10);
pos = temp.indexOf(",");
Longitude = temp.substring(0,pos);
gps->longitude = Longitude.toFloat();
// write_log(log_path,"Longitude ::::" + Longitude,10);
if(Date.indexOf(",") != -1)
{
return "-1";
}
return Date;
}
void sys_info_init()
{
gps_struct gps_structure;
String system_info;
String rtcdate_now ="20" + String(now.year) + "-" + String(now.month) + "-" + String(now.day) + " " + String(now.hour) + ":" + String(now.minute) + ":" + String(now.second);
write_log(log_path,rtcdate_now,10);
if(SD_MMC.exists("/system_info.json"))
{
write_log(log_path,"has system_info.json file",log_level);
File file;
file = SD_MMC.open("/system_info.json","rb+");
system_info = file.readString();
file.flush();
file.close();
deserializeJson(doc, system_info);
//初始化系统信息
sys_sd_doc["name"] = doc["name"].as<String>();
sys_sd_doc["serialnumber"] = STRSensorInfos_structure.serialnumber;
// sys_sd_doc["serialnumber"] = "is110008";
sys_sd_doc["version"] = doc["version"].as<String>();
sys_sd_doc["date"] = rtcdate_now;
sys_sd_doc["work_mode"] = doc["work_mode"].as<String>(); //一会
if(doc["work_mode"] == "manual_mode")
{
work_mode = 0;
}
else if (doc["work_mode"] == "time_mode")
{
work_mode = 1;
}
else
{
work_mode = 0;
}
// if(caiji_mode == 7)
// {
// sys_sd_doc["work_mode"] = "specify";
// }
sys_sd_doc["caiji_mode"] = doc["caiji_mode"].as<String>();//一会
if(doc["caiji_mode"] == "start")
{
if(sys_sd_doc["caiji_mode"]=="continue") caiji_mode = 2;
}
else if(doc["caiji_mode"] == "stop")
{
if(sys_sd_doc["caiji_mode"]=="continue") caiji_mode = 0;
}
else if(doc["caiji_mode"] == "single")
{
sys_sd_doc["caiji_mode"] = doc["caiji_mode"].as<String>();
caiji_mode = 1;
}
else if(doc["caiji_mode"] == "continue")
{
sys_sd_doc["caiji_mode"] = doc["caiji_mode"].as<String>();
caiji_mode = 2;
}
else
{
}
sys_sd_doc["time_interval"] = doc["time_interval"];
time_interval = doc["time_interval"].as<uint32_t>();
sys_sd_doc["start_time"] = doc["start_time"].as<float>();
start_time = doc["start_time"].as<uint32_t>();
sys_sd_doc["stop_time"] = doc["stop_time"].as<float>();
stop_time = doc["stop_time"].as<float>();
sys_sd_doc["maximum_temperature"] = doc["maximum_temperature"].as<float>();
maximum_temperature = doc["maximum_temperature"].as<float>();
sys_sd_doc["Minimum_temperature"] = doc["Minimum_temperature"].as<float>();
Minimum_temperature = doc["Minimum_temperature"].as<float>();
sys_sd_doc["servo_offset_angle"] = doc["servo_offset_angle"].as<float>();
float a = doc["servo_offset_angle"].as<float>();
servo_offset(a);
sys_sd_doc["bochangxishu"]["a0"] = STRSensorInfos_structure.a1;
sys_sd_doc["bochangxishu"]["a1"] = STRSensorInfos_structure.a2;
sys_sd_doc["bochangxishu"]["a2"] = STRSensorInfos_structure.a3;
sys_sd_doc["bochangxishu"]["a3"] = STRSensorInfos_structure.a4;
sys_sd_doc["bochangxishu"]["b0"] = doc["bochangxishu"]["b0"].as<float>();
sys_sd_doc["bochangxishu"]["b1"] = doc["bochangxishu"]["b1"].as<float>();
sys_sd_doc["bochangxishu"]["b2"] = doc["bochangxishu"]["b2"].as<float>();
sys_sd_doc["bochangxishu"]["b3"] = doc["bochangxishu"]["b3"].as<float>();
sys_sd_doc["return_data_type"] = doc["return_data_type"].as<float>();
sys_sd_doc["return_mode"] = doc["return_mode"]; //暂定
sys_sd_doc["atuo_return"] = doc["atuo_return"].as<String>();//一会
if(doc["atuo_return"] == "yes")
{
atuo_return = 1;
}
else
{
atuo_return = 0;
}
sys_sd_doc["gps_info"]["latitude"] = gps_structure.latitude;
sys_sd_doc["gps_info"]["longitude"] = gps_structure.longitude;
system_info = "";
serializeJson(sys_sd_doc, system_info);
write_log(log_path, system_info,log_level);
doc.clear();
}
else{
write_log(log_path,"do not has system_info.json file" ,log_level);
sys_sd_doc["name"] = "HS";
// sys_sd_doc["serialnumber"] = "is110008";
sys_sd_doc["serialnumber"] = STRSensorInfos_structure.serialnumber;
sys_sd_doc["version"] = "v2.0";
sys_sd_doc["date"] = rtcdate_now;
sys_sd_doc["work_mode"] = "manual_mode";
sys_sd_doc["caiji_mode"] = "stop";
sys_sd_doc["time_interval"] = time_interval;
sys_sd_doc["start_time"] = start_time;
sys_sd_doc["stop_time"] = stop_time;
sys_sd_doc["maximum_temperature"] = maximum_temperature;
sys_sd_doc["Minimum_temperature"] = Minimum_temperature;
sys_sd_doc["servo_offset_angle"] = 0;
sys_sd_doc["bochangxishu"]["a0"] = STRSensorInfos_structure.a1;
sys_sd_doc["bochangxishu"]["a1"] = STRSensorInfos_structure.a2;
sys_sd_doc["bochangxishu"]["a2"] = STRSensorInfos_structure.a3;
sys_sd_doc["bochangxishu"]["a3"] = STRSensorInfos_structure.a4;
sys_sd_doc["bochangxishu"]["b0"] = bc_b1;
sys_sd_doc["bochangxishu"]["b1"] = bc_b2;
sys_sd_doc["bochangxishu"]["b2"] = bc_b3;
sys_sd_doc["bochangxishu"]["b3"] = bc_b4;
sys_sd_doc["return_data_type"] = return_data_type;
sys_sd_doc["return_mode"] = ""; //暂定
sys_sd_doc["atuo_return"] = "no";
sys_sd_doc["gps_info"]["latitude"] = gps_structure.latitude;
sys_sd_doc["gps_info"]["longitude"] = gps_structure.longitude;
serializeJson(sys_sd_doc, system_info);
write_log(log_path, system_info,log_level);
File file;
file = SD_MMC.open("/system_info.json","w+");
file.println(system_info);
file.flush();
file.close();
}
}
bool sys_set_time(uint32_t year,uint32_t month,uint32_t day)
{
uint32_t m[4] ={4,6,9,11};
year = year + 2000;
for(int i = 0; i < 4; i++)
{
if(month == m[i])
{
if(day >= 31) return false;
}
}
if(month == 2)
{
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
// write_log(log_path,"is ruannian" + String(day),10);
if(day > 29) return false;
}
else
{
// write_log(log_path,"not is " + String(day),10);
if(day > 28) return false;
}
}
return true;
}
// void save_ds18b20_address(uint8_t *data)
// {
// uint8_t add[8][8]={0};
// uint8_t num = data[0];
// for(uint8_t i = 0; i < 8; i++)
// {
// add[num][i] = data[i+1];
// }
// File file = SD_MMC.open("/ds18b20_address.bin", "wb");
// file.write((uint8_t *)add, 64);
// file.flush();
// file.close();
// }
// void read_ds18b20_address()
// {
// uint8_t add[8][8]={0};
// File file = SD_MMC.open("/ds18b20_address.bin", "rb");
// file.read((uint8_t *)add, 64);
// file.flush();
// file.close();
// for(uint8_t i = 0; i < 8; i++)
// {
// set_ds18b20_address(i,add[i]);
// }
// }
// void sd_read_set_ds18b20_address()
// {
// uint8_t add[8];
// String str1[8] = {"sensor0","sensor1","sensor2","sensor3","sensor4","sensor5","sensor6","sensor7"};
// String str2[8] = {"byte0","byte1","byte2","byte3","byte4","byte5","byte6","byte7"};
// if(SD_MMC.exists("/temp_sensor.json"))
// {
// File file;
// file = SD_MMC.open("/temp_sensor.json","rb+");
// String temp_sensor = file.readString();
// file.flush();
// file.close();
// deserializeJson(doc, temp_sensor);
// for(uint8_t a = 0; a < 8; a++)
// {
// for(uint8_t b = 0; b < 8; b++)
// {
// add[b] = doc[str1[a]][str2[b]];
// ds18b20_doc[a][b] = doc[str1[a]][str2[b]];
// }
// set_ds18b20_address(a,add);
// }
// temp_sensor = "";
// serializeJson(doc, temp_sensor);
// write_log(log_path, temp_sensor,log_level);
// }
// else
// {
// write_log(log_path,"do not has file",10);
// for(uint8_t a = 0; a < 8; a++)
// {
// for(uint8_t b = 0; b < 8; b++)
// {
// ds18b20_doc[a][b] = "";
// }
// }
// File file;
// file = SD_MMC.open("/temp_sensor.json","w+");
// file.flush();
// file.close();
// }
// doc.clear();
// }
// void save_sd_ds18b20_address(uint8_t num,uint8_t *addr)
// {
// String str1[8] = {"sensor0","sensor1","sensor2","sensor3","sensor4","sensor5","sensor6","sensor7"};
// String str2[8] = {"byte0","byte1","byte2","byte3","byte4","byte5","byte6","byte7"};
// String temp_sensor;
// for(uint8_t i = 0; i < 8; i++)
// {
// ds18b20_doc[str1[num]][str2[i]] = addr[i];
// }
// temp_sensor = "";
// serializeJson(ds18b20_doc, temp_sensor);
// write_log(log_path, temp_sensor,log_level);
// File file;
// file = SD_MMC.open("/temp_sensor.json","w+");
// file.println(temp_sensor);
// file.flush();
// file.close();
// }
//dingbiao_path
//1、dingbiao/dingbiao_up_gain.txt
//2、dingbiao/dingbiao_up_offset.txt
//3、dingbiao/dingbiao_down_gain.txt
//4、dingbiao/dingbiao_down_offset.txt
bool read_dingbiao(String dingbiao_path,uint8_t *dianbiao_data_buff)
{
if(SD_MMC.exists(dingbiao_path))
{
File file;
file = SD_MMC.open(dingbiao_path,"rb");
file.read(dianbiao_data_buff,sizeof(IS11_datastruct));
file.flush();
file.close();
}
else
{
return false;
}
return true;
}
void send_dingbiao(String dingbiao_path)
{
uint32_t dingbiao_len = 0;
uint8_t *send_dingbiao_buff = new uint8_t[sizeof(IS11_datastruct)+7];
uint8_t *read_dingbiao_buff = new uint8_t[sizeof(IS11_datastruct)];
if(read_dingbiao(dingbiao_path,read_dingbiao_buff))
{
dingbiao_len = IRIS_Protocol_Pack(0x02,(uint16_t)sizeof(IS11_datastruct), read_dingbiao_buff,send_dingbiao_buff);
wb485Serial.write(send_dingbiao_buff,dingbiao_len);
}
delete read_dingbiao_buff;
delete send_dingbiao_buff;
}
void dingbiao_init(String dingbiao_path)
{
uint8_t *read_dingbiao_buff = new uint8_t[sizeof(IS11_datastruct)];
if(read_dingbiao(dingbiao_path,read_dingbiao_buff))
{
is11Sensor->save_dingbiao(read_dingbiao_buff);
}
delete read_dingbiao_buff;
}
// /////////////////////////////////上传数据/////////////////////////////////////
// bool UpdateData(String path, char *str, size_t lenth, String Contenttype = "")
// {
// http->beginRequest();
// http->post(path);
// if (Contenttype != "")
// {
// http->sendHeader(HTTP_HEADER_CONTENT_TYPE, Contenttype);
// /* code */
// }
// http->sendHeader(HTTP_HEADER_CONTENT_LENGTH, lenth);
// http->endRequest();
// int err = http->write((const byte *)str, lenth);
// delay(1000);
// Serial.print("send date size");
// Serial.println(err);
// /*
// for (size_t i = 0; i < lenth; i++)
// {
// Serial.print("0x");
// Serial.print(str[i],HEX);
// Serial.print(" ");
// if (i%20==0)
// {
// Serial.println(" ");
// }
// }
// */
// // http->write((const byte*)IS1Sensor.UpData, IS1Sensor.SensorInfo.BandNum*2);
// // http->stop();
// Serial.println("hear1");
// if (err == 0)
// {
// http->stop();
// return false;
// }
// int status = http->responseStatusCode();
// Serial.println("hear3");
// if (!status)
// {
// http->stop();
// return false;
// }
// int length = http->contentLength();
// Serial.println("hear4");
// if (length == 0)
// {
// http->stop();
// return false;
// }
// String body = http->responseBody();
// Serial.println("body:"+body);
// if (body != "ok")
// {
// http->stop();
// return false;
// }
// http->stop();
// return true;
// }
// void ReuploadData(String path, String webpath, String content = "")
// {
// vTaskDelay(1);
// Vector<String> files;
// String vec[20]; //每次处理20个
// files.setStorage(vec);
// while (!sdcard::ListDir(path.c_str(), files))
// {
// if (files.size() != 0)
// {
// Serial.println("find " + String(files.size()) + "file");
// for (size_t i = 0; i < files.size(); i++)
// {
// File nowfile = SD_MMC.open(files.at(i).c_str(), "rb");
// size_t size = nowfile.size();
// char *arr = new char[size];
// nowfile.readBytes(arr, size);
// bool flagsucc = UpdateData(webpath, arr, size, content);
// if (!flagsucc)
// {
// return;
// /* code */
// }
// delete[] arr;
// sdcard::deleteFolderOrFile(files.at(i).c_str());
// vTaskDelay(1);
// /* code */
// }
// }
// vTaskDelay(1);
// }
// if (files.size() != 0)
// {
// Serial.println("find " + String(files.size()) + "file not enough 20");
// for (size_t i = 0; i < files.size(); i++)
// {
// vTaskDelay(1);
// File nowfile = SD_MMC.open(files.at(i).c_str(), "rb");
// size_t size = nowfile.size();
// char *arr = new char[size];
// nowfile.readBytes(arr, size);
// Serial.println("run here now");
// bool flagsucc = UpdateData(webpath, arr, size, content);
// if (!flagsucc)
// {
// return;
// /* code */
// }
// delete[] arr;
// sdcard::deleteFolderOrFile(files.at(i).c_str());
// /* code */
// }
// }
// vTaskDelay(1);
// }
// ///////////////////////////////////////////////////////////////////////////////////////////////////
String getnetData()
{
write_log(log_path,"start get net data",10);
int err = http->get("/weather/php/Date.php");
if (err != 0)
{
return "-1";
}
write_log(log_path,"responseStatusCode",10);
int status = http->responseStatusCode();
if (!status)
{
return "-1";
}
int times_try = 0;
write_log(log_path,"headerAvailable",10);
while (http->headerAvailable())
{
if(times_try > 100)
{
http->stop();
return "-1";
}
write_log(log_path,"readHeaderName",10);
String headerName = http->readHeaderName();
write_log(log_path,"readHeaderValue",10);
String headerValue = http->readHeaderValue();
vTaskDelay(100);
times_try++;
}
write_log(log_path,"isResponseChunked",10);
if (http->isResponseChunked())
{
}
write_log(log_path,"contentLength",10);
String body = http->responseBody();
http->stop();
return body;
}
void rm_dir_or_file( const char * dirname)
{
File root = SD_MMC.open(dirname);
String dir = String(dirname);
if(root.isDirectory())
{
File file = root.openNextFile();
if(file)
{
if (file.isDirectory())
{
dir = String(dirname) + "/" + String(file.name());
write_log(log_path,dir,10);
rm_dir_or_file(dir.c_str());
}
else
{
do
{
dir = String(dirname) + "/" + String(file.name());
if(SD_MMC.remove(dir))
{
write_log(log_path,"remove file success",10);
}
else
{
write_log(log_path,"remove file failed",10);
break;
}
file = root.openNextFile();
if(!file) break;
} while (!file.isDirectory());
}
}
else
{
SD_MMC.rmdir(dir);
}
}
else
{
SD_MMC.remove(dir);
}
}
// void rm_dir_or_file( const char * dirname)
// {
// File root = SD_MMC.open(dirname);
// String dir = String(dirname);
// if(root.isDirectory())
// {
// File file = root.openNextFile();
// if(file)
// {
// while (file.isDirectory())
// {
// dir = String(dirname) + "/" + String(file.name());
// write_log(log_path,dir,10);
// rm_dir_or_file(dir.c_str());
// file = root.openNextFile();
// }
// if(!file.isDirectory())
// {
// do
// {
// dir = String(dirname) + "/" + String(file.name());
// if(SD_MMC.remove(dir))
// {
// write_log(log_path,"remove file success",10);
// }
// else
// {
// write_log(log_path,"remove file failed",10);
// break;
// }
// file = root.openNextFile();
// if(!file) break;
// } while (!file.isDirectory());
// }
// }
// else
// {
// SD_MMC.rmdir(dir);
// }
// }
// else
// {
// SD_MMC.remove(dir);
// }
// }
//0:关闭 1:开启
void low_power_mode(uint8_t state)
{
if(state == 0)
{
//关闭光谱仪
pinMode(36,INPUT);
//关闭AIR780E
pinMode(37,OUTPUT);
digitalWrite(37,LOW);
}
else
{
//开启光谱仪
pinMode(36,OUTPUT);
digitalWrite(36,LOW);
//开启AIR780E
pinMode(37,OUTPUT);
digitalWrite(37,HIGH);
}
}