完成
This commit is contained in:
@ -30,13 +30,14 @@
|
|||||||
|
|
||||||
[env:esp32-s3-devkitc-1]
|
[env:esp32-s3-devkitc-1]
|
||||||
; platformio/espressif32@^6.4.0
|
; platformio/espressif32@^6.4.0
|
||||||
platform = espressif32 @ 6.8.0
|
; platform = espressif32
|
||||||
|
platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.11/platform-espressif32.zip
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
|
|
||||||
framework = arduino
|
framework = arduino
|
||||||
platform_packages =
|
platform_packages =
|
||||||
toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
|
; toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
|
||||||
; framework-arduinoespressif32 @ 2.0.6+sha.099b432
|
; framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32#master
|
||||||
; board_upload.flash_size=4MB
|
; board_upload.flash_size=4MB
|
||||||
board_upload.flash_size=4MB
|
board_upload.flash_size=4MB
|
||||||
board_upload.maximum_size=327680
|
board_upload.maximum_size=327680
|
||||||
@ -59,10 +60,12 @@ board_build.flash_mode = dio
|
|||||||
build_flags:
|
build_flags:
|
||||||
-DVERSION=${this.custom_prog_version}
|
-DVERSION=${this.custom_prog_version}
|
||||||
-DARDUINO_USB_CDC_ON_BOOT=1
|
-DARDUINO_USB_CDC_ON_BOOT=1
|
||||||
|
; -DCONFIG_SOC_SDMMC_HOST_SUPPORTED=y,
|
||||||
|
; -DCONFIG_TINYUSB_MSC_ENABLED=y
|
||||||
;-DDINBIAO
|
;-DDINBIAO
|
||||||
|
|
||||||
extra_scripts = pre:extra_script.py
|
extra_scripts = pre:extra_script.py
|
||||||
custom_prog_version = V3.1DDY
|
custom_prog_version = V3.2
|
||||||
debug_tool.upload_protocol = esp-builtin
|
debug_tool.upload_protocol = esp-builtin
|
||||||
monitor_speed = 115200 ; 你当前是 921600,若改回 115200 请同时调整
|
monitor_speed = 115200 ; 你当前是 921600,若改回 115200 请同时调整
|
||||||
monitor_filters = esp32_exception_decoder
|
monitor_filters = esp32_exception_decoder
|
||||||
@ -3,7 +3,8 @@
|
|||||||
#define STRINGIFY(x) #x
|
#define STRINGIFY(x) #x
|
||||||
#define TOSTRING(x) STRINGIFY(x)
|
#define TOSTRING(x) STRINGIFY(x)
|
||||||
// #define ARDUINO_USB_MODE 0
|
// #define ARDUINO_USB_MODE 0
|
||||||
|
#include <freertos/FreeRTOS.h>
|
||||||
|
#include <freertos/event_groups.h>
|
||||||
|
|
||||||
//#define DebugCalibration
|
//#define DebugCalibration
|
||||||
//#define DINBIAO
|
//#define DINBIAO
|
||||||
@ -14,6 +15,11 @@
|
|||||||
#define Curentvsion TOSTRING(VERSION)
|
#define Curentvsion TOSTRING(VERSION)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define STOP_WORK_BIT (1<<0)
|
||||||
|
#define StART_WORK_BIT (1<<1)
|
||||||
|
#define START_MSC_BIT (1<<2)
|
||||||
|
|
||||||
|
extern EventGroupHandle_t Eventgroup;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -1,7 +1,7 @@
|
|||||||
#include"Myhttpserver.h"
|
#include"Myhttpserver.h"
|
||||||
myHttpServer * myhttpserver;
|
myHttpServer * myhttpserver;
|
||||||
|
#include <log.h>
|
||||||
|
#include <updatebyme.h>
|
||||||
String myHttpServer::getnetData()
|
String myHttpServer::getnetData()
|
||||||
{
|
{
|
||||||
if (!isinit)
|
if (!isinit)
|
||||||
@ -83,7 +83,8 @@ bool myHttpServer::UpdateData(String path, char *str, size_t lenth, String Conte
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Serial.println("start put data to "+path);
|
// Serial.println("start put data to "+path);
|
||||||
|
write_log_def(10,"start put data to "+path);
|
||||||
http1->beginRequest();
|
http1->beginRequest();
|
||||||
http1->post(path);
|
http1->post(path);
|
||||||
if (Contenttype != "")
|
if (Contenttype != "")
|
||||||
@ -97,8 +98,9 @@ bool myHttpServer::UpdateData(String path, char *str, size_t lenth, String Conte
|
|||||||
http1->endRequest();
|
http1->endRequest();
|
||||||
int err = http1->write((const byte *)str, lenth);
|
int err = http1->write((const byte *)str, lenth);
|
||||||
delay(100);
|
delay(100);
|
||||||
Serial.print("send date size");
|
// Serial.print("send date size");
|
||||||
Serial.println(err);
|
// Serial.println(err);
|
||||||
|
write_log_def(10,"send date size"+String(err));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for (size_t i = 0; i < lenth; i++)
|
for (size_t i = 0; i < lenth; i++)
|
||||||
@ -138,7 +140,8 @@ bool myHttpServer::UpdateData(String path, char *str, size_t lenth, String Conte
|
|||||||
}
|
}
|
||||||
|
|
||||||
String body = http1->responseBody();
|
String body = http1->responseBody();
|
||||||
Serial.println("body:"+body);
|
// Serial.println("body:"+body);
|
||||||
|
write_log_def(10,"body:"+body);
|
||||||
if (body != "ok")
|
if (body != "ok")
|
||||||
{
|
{
|
||||||
http1->stop();
|
http1->stop();
|
||||||
@ -160,17 +163,67 @@ void myHttpServer::ReuploadData(String path, String webpath, String content )
|
|||||||
Vector<String> files;
|
Vector<String> files;
|
||||||
String vec[20]; //每次处理20个
|
String vec[20]; //每次处理20个
|
||||||
files.setStorage(vec);
|
files.setStorage(vec);
|
||||||
while (!sdcard::ListDir(path.c_str(), files))
|
sdcard::lock();
|
||||||
|
bool hasmore = !sdcard::ListDir(path.c_str(), files);
|
||||||
|
sdcard::unlock();
|
||||||
|
while (hasmore)
|
||||||
{
|
{
|
||||||
|
sdcard::lock();
|
||||||
if (files.size() != 0)
|
if (files.size() != 0)
|
||||||
{
|
{
|
||||||
Serial.println("find " + String(files.size()) + "file");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Serial.println("find " + String(files.size()) + "file");
|
||||||
|
write_log_def(10,"find " + String(files.size()) + "file");
|
||||||
for (size_t i = 0; i < files.size(); i++)
|
for (size_t i = 0; i < files.size(); i++)
|
||||||
{
|
{
|
||||||
|
//判断是否时md5文件 如果是则跳过
|
||||||
|
if (files.at(0).endsWith(".md5"))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//判断filename.md5是否存在 如果存在则读取md5并计算文件的md5进行对比
|
||||||
|
if (!sdcard::fileexists((files.at(i) + ".md5").c_str()))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
|
||||||
|
}
|
||||||
|
String md5value=sdcard::ReadFileToString((files.at(i) + ".md5").c_str());
|
||||||
|
if (md5value=="")
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
//计算文件的md5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File nowfile = SD_MMC.open(files.at(i).c_str(), "rb");
|
File nowfile = SD_MMC.open(files.at(i).c_str(), "rb");
|
||||||
size_t size = nowfile.size();
|
size_t size = nowfile.size();
|
||||||
char *arr = new char[size];
|
char *arr = new char[size];
|
||||||
nowfile.readBytes(arr, size);
|
nowfile.readBytes(arr, size);
|
||||||
|
MD5Builder md5my;
|
||||||
|
md5my.begin();
|
||||||
|
md5my.add((uint8_t *)arr, size);
|
||||||
|
md5my.calculate();
|
||||||
|
String md5string = md5my.toString();
|
||||||
|
if (md5string != md5value)
|
||||||
|
{
|
||||||
|
// Serial.println("file md5 not match ,skip this file"+files.at(i));
|
||||||
|
write_log_def(10,"file md5 not match ,skip this file"+files.at(i));
|
||||||
|
delete[] arr;
|
||||||
|
sdcard::deleteFolderOrFile(files.at(i).c_str());
|
||||||
|
continue;
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool flagsucc = UpdateData(webpath, arr, size, content);
|
bool flagsucc = UpdateData(webpath, arr, size, content);
|
||||||
if (!flagsucc)
|
if (!flagsucc)
|
||||||
{
|
{
|
||||||
@ -183,11 +236,16 @@ void myHttpServer::ReuploadData(String path, String webpath, String content )
|
|||||||
/* code */
|
/* code */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
hasmore = !sdcard::ListDir(path.c_str(), files);
|
||||||
|
sdcard::unlock();
|
||||||
vTaskDelay(1);
|
vTaskDelay(1);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (files.size() != 0)
|
if (files.size() != 0)
|
||||||
{
|
{
|
||||||
Serial.println("find " + String(files.size()) + "file not enough 20");
|
sdcard::lock();
|
||||||
|
// Serial.println("find " + String(files.size()) + "file not enough 20");
|
||||||
|
write_log_def(10,"find " + String(files.size()) + "file not enough 20");
|
||||||
for (size_t i = 0; i < files.size(); i++)
|
for (size_t i = 0; i < files.size(); i++)
|
||||||
{
|
{
|
||||||
vTaskDelay(1);
|
vTaskDelay(1);
|
||||||
@ -195,7 +253,9 @@ void myHttpServer::ReuploadData(String path, String webpath, String content )
|
|||||||
size_t size = nowfile.size();
|
size_t size = nowfile.size();
|
||||||
char *arr = new char[size];
|
char *arr = new char[size];
|
||||||
nowfile.readBytes(arr, size);
|
nowfile.readBytes(arr, size);
|
||||||
Serial.println("run here now");
|
|
||||||
|
write_log_def(10,"run here now 123");
|
||||||
|
vTaskDelay(1);
|
||||||
bool flagsucc = UpdateData(webpath, arr, size, content);
|
bool flagsucc = UpdateData(webpath, arr, size, content);
|
||||||
if (!flagsucc)
|
if (!flagsucc)
|
||||||
{
|
{
|
||||||
@ -207,21 +267,26 @@ void myHttpServer::ReuploadData(String path, String webpath, String content )
|
|||||||
sdcard::deleteFolderOrFile(files.at(i).c_str());
|
sdcard::deleteFolderOrFile(files.at(i).c_str());
|
||||||
/* code */
|
/* code */
|
||||||
}
|
}
|
||||||
|
sdcard::unlock();
|
||||||
}
|
}
|
||||||
vTaskDelay(1);
|
vTaskDelay(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Reuploaddata1(void *) //重新上传数据
|
void Reuploaddata1(void *) //重新上传数据
|
||||||
{
|
{
|
||||||
|
|
||||||
myhttpserver->ReuploadData("/down", Http_Sepctral_Path);
|
myhttpserver->ReuploadData("/down", Http_Sepctral_Path);
|
||||||
myhttpserver->ReuploadData("/up", Http_Sepctral_Path);
|
myhttpserver->ReuploadData("/up", Http_Sepctral_Path);
|
||||||
myhttpserver->ReuploadData("/other", Http_Wind_Path, "application/json");
|
myhttpserver->ReuploadData("/other", Http_Wind_Path, "application/json");
|
||||||
|
|
||||||
}
|
}
|
||||||
void Reuploaddata2() //重新上传数据
|
void Reuploaddata2() //重新上传数据
|
||||||
{
|
{
|
||||||
|
// sdcard::lock();
|
||||||
myhttpserver->ReuploadData("/down", Http_Sepctral_Path);
|
myhttpserver->ReuploadData("/down", Http_Sepctral_Path);
|
||||||
myhttpserver->ReuploadData("/up", Http_Sepctral_Path);
|
myhttpserver->ReuploadData("/up", Http_Sepctral_Path);
|
||||||
myhttpserver->ReuploadData("/other", Http_Wind_Path, "application/json");
|
myhttpserver->ReuploadData("/other", Http_Wind_Path, "application/json");
|
||||||
|
// sdcard::unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void myHttpServer::setup1(Client &client,char * serveradd)
|
void myHttpServer::setup1(Client &client,char * serveradd)
|
||||||
@ -232,5 +297,6 @@ void myHttpServer::setup1(Client &client,char * serveradd)
|
|||||||
isinit = true;
|
isinit = true;
|
||||||
log_path = "/httplog.txt";
|
log_path = "/httplog.txt";
|
||||||
myhttpserver= this;
|
myhttpserver= this;
|
||||||
Serial.println("start httpserver 2332213"+String(http1->iServerName));
|
// Serial.println("start httpserver 2332213"+String(http1->iServerName));
|
||||||
|
write_log_def(10,"start httpserver: "+String(http1->iServerName));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,9 +7,13 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
void Reuploaddata1(void *);
|
void Reuploaddata1(void *);
|
||||||
void Reuploaddata2() ;
|
void Reuploaddata2() ;
|
||||||
static String Http_Sepctral_Path="/DDY/weather/php/SpectralDataUp.php";
|
// static String Http_Sepctral_Path="/DDY/weather/php/SpectralDataUp.php";
|
||||||
|
|
||||||
static String Http_Wind_Path="/DDY/weather/php/WindsensorUp.php";
|
// static String Http_Wind_Path="/DDY/weather/php/WindsensorUp.php";
|
||||||
|
|
||||||
|
static String Http_Sepctral_Path="/weather/php/SpectralDataUp.php";
|
||||||
|
|
||||||
|
static String Http_Wind_Path="/weather/php/WindsensorUp.php";
|
||||||
static String Http_Log_Path="/weather/php/log.php";
|
static String Http_Log_Path="/weather/php/log.php";
|
||||||
static String Http_Sensorinfo_UP_Path="/weather/php/SensorInfoUp.php";
|
static String Http_Sensorinfo_UP_Path="/weather/php/SensorInfoUp.php";
|
||||||
static String Http_Station_GPS_INfo_Path="/weather/php/StationGPSinfo.php";
|
static String Http_Station_GPS_INfo_Path="/weather/php/StationGPSinfo.php";
|
||||||
|
|||||||
@ -1,10 +1,60 @@
|
|||||||
#include"SDmanger.h"
|
#include"SDmanger.h"
|
||||||
|
#include "esp_vfs_fat.h"
|
||||||
|
#include "sdmmc_cmd.h"
|
||||||
|
#include <Arduino.h>
|
||||||
File Comenfile;
|
File Comenfile;
|
||||||
|
|
||||||
|
SemaphoreHandle_t sd_mutex = xSemaphoreCreateMutex();
|
||||||
|
|
||||||
|
void sdcard::lock() {
|
||||||
|
xSemaphoreTake(sd_mutex, portMAX_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sdcard::unlock() {
|
||||||
|
xSemaphoreGive(sd_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sdcard::formatSDCard() {
|
||||||
|
// SD_MMC.end(); // 先卸载SD卡文件系统
|
||||||
|
Serial.println("Formatting SD card...");
|
||||||
|
esp_vfs_fat_mount_config_t mount_config = {
|
||||||
|
.format_if_mount_failed = true, // 不自动格式化
|
||||||
|
.max_files = 5,
|
||||||
|
.allocation_unit_size = 16 * 1024
|
||||||
|
};
|
||||||
|
sdmmc_card_t* card = nullptr;
|
||||||
|
|
||||||
|
card= SD_MMC.card();
|
||||||
|
//esp_err_t err = esp_vfs_fat_sdcard_format("/sdcard", card);
|
||||||
|
// 调用真正的格式化函数
|
||||||
|
esp_vfs_fat_mount_config_t fmt_config = mount_config; // 也可以调整 fmt_config 参数
|
||||||
|
esp_err_t err = esp_vfs_fat_sdcard_format_cfg("/sdcard", card, &fmt_config);
|
||||||
|
Serial.println("Formatting completed");
|
||||||
|
if (err == ESP_OK) {
|
||||||
|
Serial.println("SD card formatted successfully");
|
||||||
|
} else {
|
||||||
|
Serial.printf("Format failed: %s\n", esp_err_to_name(err));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#define sd_cmd 7
|
||||||
|
#define sd_clk 6
|
||||||
|
#define sd_dat0 5
|
||||||
|
#define sd_dat1 4
|
||||||
|
#define sd_dat2 16
|
||||||
|
#define sd_dat3 15
|
||||||
int sdcard::init_sdcard()
|
int sdcard::init_sdcard()
|
||||||
{
|
{
|
||||||
SD_MMC.setPins(9,10,11,12,13,14);
|
pinMode(48, OUTPUT);
|
||||||
int succ = SD_MMC.begin("/sdcard", true,true,150);
|
digitalWrite(48, HIGH);
|
||||||
|
vTaskDelay(1000);
|
||||||
|
SD_MMC.setPins(9,10,11,12,13,14);
|
||||||
|
//格式化sd卡
|
||||||
|
//SD_MMC.setPins(sd_clk,sd_cmd,sd_dat0,sd_dat1,sd_dat2,sd_dat3);
|
||||||
|
|
||||||
|
int succ = SD_MMC.begin("/sdcard", false,true);
|
||||||
|
|
||||||
if (succ) {
|
if (succ) {
|
||||||
Serial.printf("SD_MMC Begin: %d\n", succ);
|
Serial.printf("SD_MMC Begin: %d\n", succ);
|
||||||
uint8_t cardType = SD_MMC.cardType();
|
uint8_t cardType = SD_MMC.cardType();
|
||||||
@ -32,6 +82,8 @@ int sdcard::init_sdcard()
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void sdcard::mylistDir( const char * dirname, uint8_t levels) {
|
void sdcard::mylistDir( const char * dirname, uint8_t levels) {
|
||||||
|
|
||||||
Serial.printf("Listing directory: %s\n", "/");
|
Serial.printf("Listing directory: %s\n", "/");
|
||||||
@ -64,13 +116,27 @@ int sdcard::init_sdcard()
|
|||||||
Serial.print(" SIZE: ");
|
Serial.print(" SIZE: ");
|
||||||
Serial.println(filex.size());
|
Serial.println(filex.size());
|
||||||
}
|
}
|
||||||
|
filex.close();
|
||||||
filex = root.openNextFile();
|
filex = root.openNextFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sdcard::fileexists(const char * path)
|
||||||
|
{
|
||||||
|
File f = SD_MMC.open(path);
|
||||||
|
if (!f) {
|
||||||
|
f.close();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool sdcard::ListDir(const char * dirname,Vector <String> &stringlist)
|
bool sdcard::ListDir(const char * dirname,Vector <String> &stringlist)
|
||||||
{
|
{
|
||||||
stringlist.clear();
|
stringlist.clear();
|
||||||
Serial.printf("Listing directory: %s\n", dirname);
|
Serial.println("Listing directory: ");
|
||||||
|
|
||||||
String dir(dirname);
|
String dir(dirname);
|
||||||
File root = SD_MMC.open(dirname);
|
File root = SD_MMC.open(dirname);
|
||||||
if (!root) {
|
if (!root) {
|
||||||
@ -98,9 +164,10 @@ bool sdcard::ListDir(const char * dirname,Vector <String> &stringlist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
filex.close();
|
||||||
filex = root.openNextFile();
|
filex = root.openNextFile();
|
||||||
}
|
}
|
||||||
|
filex.close();
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -241,6 +308,8 @@ bool sdcard::ListDir(const char * dirname,Vector <String> &stringlist)
|
|||||||
return SD_MMC.mkdir(path);
|
return SD_MMC.mkdir(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace sdcard
|
namespace sdcard
|
||||||
{
|
{
|
||||||
void openFileformWirte(String Path)
|
void openFileformWirte(String Path)
|
||||||
@ -274,7 +343,23 @@ namespace sdcard
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
String ReadFileToString(const char * path)
|
||||||
|
{
|
||||||
|
String ret="";
|
||||||
|
File file=SD_MMC.open(path,"r");
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
while (file.available())
|
||||||
|
{
|
||||||
|
ret+=char(file.read());
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
void closeCommenFile()
|
void closeCommenFile()
|
||||||
{
|
{
|
||||||
if (Comenfile.available())
|
if (Comenfile.available())
|
||||||
|
|||||||
@ -22,7 +22,11 @@ namespace sdcard{
|
|||||||
void WritetoFileCommen(String Str);
|
void WritetoFileCommen(String Str);
|
||||||
void WritetoFileCommen(char *data,size_t lenth);
|
void WritetoFileCommen(char *data,size_t lenth);
|
||||||
void closeCommenFile();
|
void closeCommenFile();
|
||||||
|
void lock();
|
||||||
|
void unlock();
|
||||||
|
String ReadFileToString(const char * path);
|
||||||
|
bool fileexists(const char * path);
|
||||||
|
void formatSDCard();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "wifidebug.h"
|
#include "wifidebug.h"
|
||||||
|
|
||||||
|
#include <esp_task_wdt.h>
|
||||||
#include "SensorOptoSky.h"
|
#include "SensorOptoSky.h"
|
||||||
bool SensorOptoSky::initSensor(int id )
|
bool SensorOptoSky::initSensor(int id )
|
||||||
{
|
{
|
||||||
@ -167,6 +167,7 @@ void SensorOptoSky::GetOneDate(int msc) {
|
|||||||
memcpy(DATABUFF, IS1Sensor.result + 1, SensorInfo.BandNum * 2);
|
memcpy(DATABUFF, IS1Sensor.result + 1, SensorInfo.BandNum * 2);
|
||||||
//memcpy(DATABUFF, IS1Sensor.result , SensorInfo.BandNum * 2);
|
//memcpy(DATABUFF, IS1Sensor.result , SensorInfo.BandNum * 2);
|
||||||
shortLittletoBiG(DATABUFF, SensorInfo.BandNum);
|
shortLittletoBiG(DATABUFF, SensorInfo.BandNum);
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
}
|
}
|
||||||
|
|
||||||
void SensorOptoSky::shortLittletoBiG(unsigned short *data, int lenth) {
|
void SensorOptoSky::shortLittletoBiG(unsigned short *data, int lenth) {
|
||||||
@ -250,11 +251,17 @@ void SensorOptoSky::TakeOneJob() {
|
|||||||
int shutter=OptSnenser(90);
|
int shutter=OptSnenser(90);
|
||||||
shutterup=shutter;
|
shutterup=shutter;
|
||||||
GetOneDate(shutter);
|
GetOneDate(shutter);
|
||||||
|
|
||||||
|
//esp_task_wdt_reset(); //手动喂狗
|
||||||
|
|
||||||
memcpy(UpData,DATABUFF,SensorInfo.BandNum*2);
|
memcpy(UpData,DATABUFF,SensorInfo.BandNum*2);
|
||||||
SetShutter(0);
|
SetShutter(0);
|
||||||
GetOneDate(shutter);
|
GetOneDate(shutter);
|
||||||
|
|
||||||
for (int i = 0; i < SensorInfo.BandNum; ++i) {
|
for (int i = 0; i < SensorInfo.BandNum; ++i) {
|
||||||
UpData[i]=UpData[i]-DATABUFF[i];
|
int temp=UpData[i]-DATABUFF[i];
|
||||||
|
UpData[i]=temp>0?temp:0;
|
||||||
|
// UpData[i]=UpData[i]-DATABUFF[i];
|
||||||
}
|
}
|
||||||
shutterup=shutter;
|
shutterup=shutter;
|
||||||
Serial.println("Finish Up ------Green");
|
Serial.println("Finish Up ------Green");
|
||||||
@ -282,7 +289,9 @@ void SensorOptoSky::TakeOneJob() {
|
|||||||
SetShutter(0);
|
SetShutter(0);
|
||||||
GetOneDate(shutter);
|
GetOneDate(shutter);
|
||||||
for (int i = 0; i < SensorInfo.BandNum; ++i) {
|
for (int i = 0; i < SensorInfo.BandNum; ++i) {
|
||||||
DownData[i]=DownData[i]-DATABUFF[i];
|
int temp=DownData[i]-DATABUFF[i];
|
||||||
|
DownData[i]=temp>0?temp:0;
|
||||||
|
|
||||||
}
|
}
|
||||||
shutterdown=shutter;
|
shutterdown=shutter;
|
||||||
Serial.println("Down Finish ------Blue");
|
Serial.println("Down Finish ------Blue");
|
||||||
|
|||||||
104
src/log.cpp
104
src/log.cpp
@ -28,8 +28,90 @@ ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
|
|||||||
加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
|
加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
String pathforlog = "/log.txt";
|
||||||
|
dateandtime start_offset_datetime = {2024, 1, 1, 0, 0, 0}; // 设置起始时间为2024-01-01 00:00:00
|
||||||
|
uint64_t start_offset_mcu_time= 0; // 2024-01-01 00:00:00对应的Unix时间戳
|
||||||
|
|
||||||
|
|
||||||
|
void setpathforlog(String path)
|
||||||
|
{
|
||||||
|
pathforlog = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isLeapYear(int year) {
|
||||||
|
return (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
int daysInMonth(int year, int month) {
|
||||||
|
static const int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
|
||||||
|
if (month == 2 && isLeapYear(year)) return 29;
|
||||||
|
return days[month - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
void tmaddseconds(dateandtime &tm, long long n) {
|
||||||
|
// 先加秒
|
||||||
|
tm.second += n;
|
||||||
|
|
||||||
|
// 秒转分钟
|
||||||
|
tm.minute += tm.second / 60;
|
||||||
|
tm.second %= 60;
|
||||||
|
|
||||||
|
// 分钟转小时
|
||||||
|
tm.hour += tm.minute / 60;
|
||||||
|
tm.minute %= 60;
|
||||||
|
|
||||||
|
// 小时转天
|
||||||
|
tm.day += tm.hour / 24;
|
||||||
|
tm.hour %= 24;
|
||||||
|
|
||||||
|
// 处理日/月/年的进位
|
||||||
|
while (true) {
|
||||||
|
int dim = daysInMonth(tm.year, tm.month);
|
||||||
|
if (tm.day <= dim) break;
|
||||||
|
tm.day -= dim;
|
||||||
|
tm.month++;
|
||||||
|
if (tm.month > 12) {
|
||||||
|
tm.month = 1;
|
||||||
|
tm.year++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setoffsettime(dateandtime tm)
|
||||||
|
{
|
||||||
|
start_offset_datetime = tm;
|
||||||
|
start_offset_mcu_time = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void write_log_def(unsigned char level,String write_data)
|
||||||
|
{
|
||||||
|
write_log(pathforlog,level,write_data);
|
||||||
|
}
|
||||||
|
String two(int v) {
|
||||||
|
if (v < 10) return "0" + String(v);
|
||||||
|
return String(v);
|
||||||
|
}
|
||||||
|
String getlocaltime()
|
||||||
|
{
|
||||||
|
unsigned long uptime = millis();
|
||||||
|
long time_diff = uptime - start_offset_mcu_time;
|
||||||
|
|
||||||
|
long seconds = time_diff / 1000;
|
||||||
|
long milliseconds = time_diff % 1000;
|
||||||
|
dateandtime tm = start_offset_datetime;
|
||||||
|
tmaddseconds(tm, seconds);
|
||||||
|
String timestr=String(tm.year) + "-"+two(tm.month) +"-" + two(tm.day) + " " + two(tm.hour) + ":" + two(tm.minute) + ":" + two(tm.second);
|
||||||
|
return timestr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void write_log(String path,unsigned char level,String write_data)
|
void write_log(String path,unsigned char level,String write_data)
|
||||||
{
|
{
|
||||||
|
//return;
|
||||||
#ifdef ceshi
|
#ifdef ceshi
|
||||||
Serial.println(write_data);
|
Serial.println(write_data);
|
||||||
#endif
|
#endif
|
||||||
@ -37,24 +119,24 @@ void write_log(String path,unsigned char level,String write_data)
|
|||||||
if(level > 10) {
|
if(level > 10) {
|
||||||
//保存本地,和同时上传云端,小于10只保存本地
|
//保存本地,和同时上传云端,小于10只保存本地
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unsigned long uptime = millis();
|
unsigned long uptime = millis();
|
||||||
unsigned long seconds = uptime / 1000;
|
long time_diff = uptime - start_offset_mcu_time;
|
||||||
unsigned long minutes = seconds / 60;
|
|
||||||
unsigned long hours = minutes / 60;
|
|
||||||
unsigned long days = hours / 24;
|
|
||||||
unsigned long years = days / 365;
|
|
||||||
seconds %= 60;
|
|
||||||
minutes %= 60;
|
|
||||||
hours %= 24;
|
|
||||||
days %= 365;
|
|
||||||
|
|
||||||
String timeString = String(years) + "-" + String(days) + "-" + String(hours) + ":" + String(minutes) + ":" + String(seconds);
|
long seconds = time_diff / 1000;
|
||||||
|
long milliseconds = time_diff % 1000;
|
||||||
|
dateandtime tm = start_offset_datetime;
|
||||||
|
tmaddseconds(tm, seconds);
|
||||||
|
|
||||||
|
|
||||||
|
String timeString = String(tm.year) + "-"+two(tm.month) +"-" + two(tm.day) + " " + two(tm.hour) + ":" + two(tm.minute) + ":" + two(tm.second)+ "." + String(milliseconds);
|
||||||
write_data = timeString + ":" + write_data;
|
write_data = timeString + ":" + write_data;
|
||||||
|
sdcard::lock();
|
||||||
File file;
|
File file;
|
||||||
file = SD_MMC.open(path,"ab+");
|
file = SD_MMC.open(path,"ab+");
|
||||||
file.println(write_data);
|
file.println(write_data);
|
||||||
file.flush();
|
file.flush();
|
||||||
file.close();
|
file.close();
|
||||||
|
sdcard::unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
15
src/log.h
15
src/log.h
@ -4,9 +4,20 @@
|
|||||||
|
|
||||||
#define ceshi 1
|
#define ceshi 1
|
||||||
#include "SDmanger.h"
|
#include "SDmanger.h"
|
||||||
|
struct dateandtime
|
||||||
|
{
|
||||||
|
int year;
|
||||||
|
int month;
|
||||||
|
int day;
|
||||||
|
int hour;
|
||||||
|
int minute;
|
||||||
|
int second;
|
||||||
|
};
|
||||||
void write_log(String path,unsigned char level,String write_data);
|
void write_log(String path,unsigned char level,String write_data);
|
||||||
|
|
||||||
|
void setoffsettime(dateandtime tm);
|
||||||
|
void write_log_def(unsigned char level,String write_data);
|
||||||
|
void setpathforlog(String path);
|
||||||
|
String getlocaltime();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
437
src/main.cpp
437
src/main.cpp
@ -1,11 +1,14 @@
|
|||||||
#include"Define.h"
|
#include"Define.h"
|
||||||
#include <GSMMannager.h>
|
#include <GSMMannager.h>
|
||||||
|
|
||||||
|
// #include "msc.h"
|
||||||
|
|
||||||
#include<driver/periph_ctrl.h>
|
#include<driver/periph_ctrl.h>
|
||||||
#include "SensorOptoSky.h"
|
#include "SensorOptoSky.h"
|
||||||
#include <SoftwareSerial.h>
|
#include <SoftwareSerial.h>
|
||||||
#include <Ticker.h>
|
#include <Ticker.h>
|
||||||
#include <updatebyme.h>
|
#include <updatebyme.h>
|
||||||
|
#include "mymsc.h"
|
||||||
//#include "MyWebServer.h"
|
//#include "MyWebServer.h"
|
||||||
#include "SDmanger.h"
|
#include "SDmanger.h"
|
||||||
//#include "HttpsOTAUpdate.h"
|
//#include "HttpsOTAUpdate.h"
|
||||||
@ -15,15 +18,16 @@
|
|||||||
#define beePin 39
|
#define beePin 39
|
||||||
#define BeeChain 0
|
#define BeeChain 0
|
||||||
#include <wifidebug.h>
|
#include <wifidebug.h>
|
||||||
|
#include <serilaFS.h>
|
||||||
#define LOGGING
|
#define LOGGING
|
||||||
//myPort将原来ESP8266对内通讯改为,485对内的通讯
|
//myPort将原来ESP8266对内通讯改为,485对内的通讯
|
||||||
// #define MYPORT_TX 45
|
// #define MYPORT_TX 45
|
||||||
// #define MYPORT_RX 46
|
// #define MYPORT_RX 46
|
||||||
|
#define WATCHDOG_TIMEOUT_SECONDS 600
|
||||||
int hassend = 0;
|
int hassend = 0;
|
||||||
GSMMannger *gsmmanger;
|
GSMMannger *gsmmanger;
|
||||||
UpDateClassByme *ProgrameUper;
|
UpDateClassByme *ProgrameUper;
|
||||||
|
EventGroupHandle_t Eventgroup;
|
||||||
|
|
||||||
SensorOptoSky IS1Sensor;
|
SensorOptoSky IS1Sensor;
|
||||||
myHttpServer *httpserver;
|
myHttpServer *httpserver;
|
||||||
@ -63,29 +67,59 @@ String fenge(String str, String fen, int index)
|
|||||||
return "-1";
|
return "-1";
|
||||||
return temps[index];
|
return temps[index];
|
||||||
}
|
}
|
||||||
|
// void beebee(int timemill)
|
||||||
|
// {
|
||||||
|
// ledcAttachPin(beePin, BeeChain);
|
||||||
|
// ledcWrite(BeeChain, 125);
|
||||||
|
// vTaskDelay(timemill);
|
||||||
|
|
||||||
|
// ledcWrite(BeeChain, 0);
|
||||||
|
// vTaskDelay(timemill);
|
||||||
|
|
||||||
|
// ledcWrite(BeeChain, 125);
|
||||||
|
// vTaskDelay(timemill);
|
||||||
|
|
||||||
|
// ledcWrite(BeeChain, 0);
|
||||||
|
// ledcDetachPin(beePin);
|
||||||
|
// }
|
||||||
|
|
||||||
void beebee(int timemill)
|
void beebee(int timemill)
|
||||||
{
|
{
|
||||||
ledcAttachPin(beePin, BeeChain);
|
// === 替换 ledcAttachPin ===
|
||||||
ledcWrite(BeeChain, 125);
|
// 旧: ledcAttachPin(beePin, BeeChain);
|
||||||
|
// 新: ledcAttach(pin, freq, resolution_bits);
|
||||||
|
// 假设频率仍然是 220Hz,分辨率是 8位 (0-255)
|
||||||
|
// 注意:如果 BeeChain 被用作一个通道号,并且你希望显式地使用它,
|
||||||
|
// 新的 ledcAttach 函数并没有直接的 channel 参数。
|
||||||
|
// 但是,你可以通过 ledcSetChannelPin(BeeChain, beePin); 来实现类似目的。
|
||||||
|
// 最常见的用法是让 ledcAttach 自动选择通道。
|
||||||
|
|
||||||
|
// 如果 BeeChain 只是一个 "逻辑链" 或者通道号,现在我们直接用 beePin 和频率、分辨率
|
||||||
|
// ledcAttach(beePin, 220, 8); // 将 beePin 关联到 LEDC,设置频率 220Hz,8位分辨率
|
||||||
|
// 这会在内部自动分配一个空闲的 LEDC 通道给 beePin。
|
||||||
|
// === 替换 ledcWrite ===
|
||||||
|
// 旧: ledcWrite(BeeChain, 125);
|
||||||
|
// 新: ledcWrite(pin, duty);
|
||||||
|
ledcWrite(beePin, 125); // 在 beePin 上设置 125 的占空比 (~49%,因为 125/255)
|
||||||
|
vTaskDelay(timemill); // 使用实时操作系统任务延迟
|
||||||
|
ledcWrite(beePin, 0); // 在 beePin 上设置 0 的占空比 (关闭)
|
||||||
vTaskDelay(timemill);
|
vTaskDelay(timemill);
|
||||||
|
ledcWrite(beePin, 125); // 在 beePin 上设置 125 的占空比 (打开)
|
||||||
ledcWrite(BeeChain, 0);
|
vTaskDelay(timemill);
|
||||||
vTaskDelay(timemill);
|
ledcWrite(beePin, 0); // 在 beePin 上设置 0 的占空比 (关闭)
|
||||||
|
// === 替换 ledcDetachPin ===
|
||||||
ledcWrite(BeeChain, 125);
|
// 旧: ledcDetachPin(beePin);
|
||||||
vTaskDelay(timemill);
|
// 新: ledcDetach(pin);
|
||||||
|
ledcDetach(beePin); // 从 LEDC 分离 beePin
|
||||||
ledcWrite(BeeChain, 0);
|
|
||||||
ledcDetachPin(beePin);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
String Datenow="";
|
String Datenow="";
|
||||||
void printbytcp(String str)
|
void printbytcp(String str)
|
||||||
{
|
{
|
||||||
//tcpserver.SendDataToClinet(str);
|
//tcpserver.SendDataToClinet(str);
|
||||||
Serial.println(str);
|
// Serial.println(str);
|
||||||
|
// write_log(log_path,0,str);
|
||||||
str=Datenow+"#######"+str;
|
str=Datenow+"#######"+str;
|
||||||
int lennn=str.length();
|
int lennn=str.length();
|
||||||
char *temp = new char[lennn];
|
char *temp = new char[lennn];
|
||||||
@ -97,13 +131,16 @@ void printbytcp(String str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void readmeichaung()
|
void readmeichaung()
|
||||||
{
|
{
|
||||||
/////////////////////////////////now///////////////////////////
|
/////////////////////////////////now///////////////////////////
|
||||||
double temprature = myslave.getMLX();
|
double temprature = myslave.getMLX();
|
||||||
Serial.println("wendu");
|
// Serial.println("wendu");
|
||||||
Serial.println(temprature);
|
// Serial.println(temprature);
|
||||||
Serial.println("hello word");
|
// Serial.println("hello word");
|
||||||
|
write_log(log_path,10,"temprature:" + String(temprature));
|
||||||
////////////////////////////////now////////////////////////////
|
////////////////////////////////now////////////////////////////
|
||||||
myslave.getWehter();
|
myslave.getWehter();
|
||||||
memcpy(windret,myslave.ret,17);
|
memcpy(windret,myslave.ret,17);
|
||||||
@ -112,24 +149,27 @@ void readmeichaung()
|
|||||||
float TT = (windret[7] * 256 + windret[8]) * 1.0 / 100;
|
float TT = (windret[7] * 256 + windret[8]) * 1.0 / 100;
|
||||||
float HH = (windret[9] * 256 + windret[10]) * 1.0 / 100;
|
float HH = (windret[9] * 256 + windret[10]) * 1.0 / 100;
|
||||||
long PP = (windret[13] * 256 + windret[14]) * 256 * 256 + (windret[11] * 256 + windret[12]);
|
long PP = (windret[13] * 256 + windret[14]) * 256 * 256 + (windret[11] * 256 + windret[12]);
|
||||||
Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
|
// Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
|
||||||
|
write_log(log_path,10,"VV:" + String(VV) + " DD:" + String(DD) + " TT:" + String(TT) + " HH:" + String(HH) + " PP:" + String(PP));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String get_GPS(void)
|
String get_GPS(void)
|
||||||
{
|
{
|
||||||
Serial.println("check GPS...");
|
|
||||||
|
write_log(log_path,10,"check GPS...");
|
||||||
gsmmanger->modem->sendAT(GF("+CGNSPWR?"));
|
gsmmanger->modem->sendAT(GF("+CGNSPWR?"));
|
||||||
gsmmanger->modem->waitResponse("OK");
|
gsmmanger->modem->waitResponse("OK");
|
||||||
|
|
||||||
Serial.println("Open GPS...");
|
|
||||||
|
write_log(log_path,10,"Open GPS...");
|
||||||
gsmmanger->modem->sendAT(GF("+CGNSPWR=1"));
|
gsmmanger->modem->sendAT(GF("+CGNSPWR=1"));
|
||||||
gsmmanger->modem->waitResponse("OK");
|
gsmmanger->modem->waitResponse("OK");
|
||||||
|
|
||||||
gsmmanger->modem->sendAT(GF("+CGNSAID=31,1,1,1"));
|
gsmmanger->modem->sendAT(GF("+CGNSAID=31,1,1,1"));
|
||||||
gsmmanger->modem->waitResponse("OK");
|
gsmmanger->modem->waitResponse("OK");
|
||||||
|
|
||||||
Serial.println("get GNSS...");
|
|
||||||
gsmmanger->modem->sendAT(GF("+CGNSINF"));
|
gsmmanger->modem->sendAT(GF("+CGNSINF"));
|
||||||
|
|
||||||
String gpsbac;
|
String gpsbac;
|
||||||
@ -149,7 +189,8 @@ String get_GPS(void)
|
|||||||
return "-1";
|
return "-1";
|
||||||
}
|
}
|
||||||
|
|
||||||
Serial.println(gpsbac);
|
|
||||||
|
|
||||||
write_log(log_path,10,"gpsdate:"+Date);
|
write_log(log_path,10,"gpsdate:"+Date);
|
||||||
return Date;
|
return Date;
|
||||||
}
|
}
|
||||||
@ -157,34 +198,89 @@ String get_GPS(void)
|
|||||||
// {
|
// {
|
||||||
// return gsmmanger->modem->getNetworkTime;
|
// return gsmmanger->modem->getNetworkTime;
|
||||||
// }
|
// }
|
||||||
#include "esp_task_wdt.h"
|
// #include "esp_task_wdt.h"
|
||||||
|
// 用于存储 loop 任务的句柄(如果需要)
|
||||||
|
TaskHandle_t loopTaskHandle = NULL;
|
||||||
|
#include <esp_task_wdt.h>
|
||||||
|
#include <freertos/FreeRTOS.h>
|
||||||
|
#include <freertos/task.h>
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
esp_task_wdt_init(20, true);
|
|
||||||
Serial.begin(115200);
|
//esp_task_wdt_init(20, true);
|
||||||
|
Serial.begin(460800);
|
||||||
Serial.println("start");
|
Serial.println("start");
|
||||||
//return;
|
//return;
|
||||||
Serial.println(Curentvsion);
|
Serial.println(Curentvsion);
|
||||||
|
sdcard::lock();
|
||||||
|
// vTaskDelay(5000);
|
||||||
sdcard::init_sdcard();
|
sdcard::init_sdcard();
|
||||||
|
String hasbeenformat = sdcard::ReadFileToString("/do_not_remove_and_edit_this_file");
|
||||||
|
if(hasbeenformat == ""){
|
||||||
|
sdcard::formatSDCard();
|
||||||
|
sdcard::WriteStringToFile("/do_not_remove_and_edit_this_file","do not remove and edit this file \n\
|
||||||
|
this file is used to tell the system that the sdcard has been formated,\
|
||||||
|
\nif you want to format the sdcard,please delete this file,\n\
|
||||||
|
the system will format the sdcard automatically next reboot.");
|
||||||
|
//重启
|
||||||
|
esp_restart();
|
||||||
|
}
|
||||||
|
// vTaskDelay(5000);
|
||||||
|
//sdcard::formatSDCard();
|
||||||
|
// while (1)
|
||||||
|
// {
|
||||||
|
// vTaskDelay(5000);
|
||||||
|
// Serial.println("restart");
|
||||||
|
|
||||||
|
|
||||||
|
// /* code */
|
||||||
|
// }
|
||||||
|
|
||||||
sdcard::testwriet();
|
sdcard::testwriet();
|
||||||
sdcard::Mkdir("/up");
|
sdcard::Mkdir("/up");
|
||||||
sdcard::Mkdir("/down");
|
sdcard::Mkdir("/down");
|
||||||
sdcard::Mkdir("/other");
|
sdcard::Mkdir("/other");
|
||||||
sdcard::Mkdir("/gps");
|
sdcard::Mkdir("/gps");
|
||||||
sdcard::Mkdir("/log");
|
sdcard::Mkdir("/log");
|
||||||
|
sdcard::unlock();
|
||||||
beginWIFI();
|
write_log(log_path,10,log_data);
|
||||||
// sdcard::mylistDir("/",2);
|
// Serial.println(gsmmanger->GetDataAndTime());
|
||||||
|
Eventgroup = xEventGroupCreate();
|
||||||
|
if (Eventgroup == NULL)
|
||||||
{
|
{
|
||||||
|
Serial.println("create eventgroup failed");
|
||||||
|
/* code */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
xTaskCreatePinnedToCore(
|
||||||
|
TaskSerialFS, // Function that should be called
|
||||||
|
"TaskSerialFS", // Name of the task (for debugging)
|
||||||
|
1000*10, // Stack size (bytes)
|
||||||
|
NULL, // Parameter to pass
|
||||||
|
1, // Task priority
|
||||||
|
NULL, // Task handle
|
||||||
|
0); // run on core 0
|
||||||
|
beginWIFI();
|
||||||
|
|
||||||
// pinMode(21, OUTPUT);
|
// pinMode(21, OUTPUT);
|
||||||
// digitalWrite(21, HIGH);
|
// digitalWrite(21, HIGH);
|
||||||
pinMode(beePin, OUTPUT);
|
pinMode(beePin, OUTPUT);
|
||||||
ledcSetup(BeeChain, 220, 8);
|
// ledcSetup(BeeChain, 220, 8);
|
||||||
ledcAttachPin(beePin, 0);
|
// ledcAttachPin(beePin, 0);
|
||||||
|
ledcAttach(beePin, 220, 8);
|
||||||
beebee(1000);
|
beebee(1000);
|
||||||
|
|
||||||
myslave.init(46,45);
|
myslave.init(46,45);
|
||||||
//sleep(3);
|
//sleep(3);
|
||||||
readmeichaung();
|
readmeichaung();
|
||||||
@ -202,6 +298,7 @@ esp_task_wdt_init(20, true);
|
|||||||
#endif
|
#endif
|
||||||
IsNetOK = gsmmanger->setpu();
|
IsNetOK = gsmmanger->setpu();
|
||||||
httpserver = new myHttpServer();
|
httpserver = new myHttpServer();
|
||||||
|
gsmmanger->client->setTimeout(20*1000); //设置客户端超时20秒
|
||||||
|
|
||||||
if (IsNetOK)
|
if (IsNetOK)
|
||||||
{
|
{
|
||||||
@ -218,6 +315,17 @@ esp_task_wdt_init(20, true);
|
|||||||
|
|
||||||
// Serial.println("start httpserver"+String(httpserver->http->iServerName));
|
// Serial.println("start httpserver"+String(httpserver->http->iServerName));
|
||||||
String Date = httpserver->getnetData();
|
String Date = httpserver->getnetData();
|
||||||
|
//String "1989-03-27 00:00:01";
|
||||||
|
dateandtime tmtemp;
|
||||||
|
tmtemp.year=Date.substring(0,4).toInt();
|
||||||
|
tmtemp.month=Date.substring(5,7).toInt();
|
||||||
|
tmtemp.day=Date.substring(8,10).toInt();
|
||||||
|
tmtemp.hour=Date.substring(11,13).toInt();
|
||||||
|
tmtemp.minute=Date.substring(14,16).toInt();
|
||||||
|
tmtemp.second=Date.substring(17,19).toInt();
|
||||||
|
setoffsettime(tmtemp);
|
||||||
|
|
||||||
|
|
||||||
if (Date=="error")
|
if (Date=="error")
|
||||||
{
|
{
|
||||||
Serial.println("getnetData failed,esp_restart");
|
Serial.println("getnetData failed,esp_restart");
|
||||||
@ -228,6 +336,7 @@ esp_task_wdt_init(20, true);
|
|||||||
Serial.println("date is :"+Date);
|
Serial.println("date is :"+Date);
|
||||||
String tem = fenge(Date," ",0);
|
String tem = fenge(Date," ",0);
|
||||||
log_path = "/log/"+tem+".log";
|
log_path = "/log/"+tem+".log";
|
||||||
|
setpathforlog(log_path);
|
||||||
log_data = Date+"\r\nSystem starts working.";
|
log_data = Date+"\r\nSystem starts working.";
|
||||||
write_log(log_path,10,"");
|
write_log(log_path,10,"");
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
@ -260,7 +369,7 @@ esp_task_wdt_init(20, true);
|
|||||||
vTaskDelay(1000);
|
vTaskDelay(1000);
|
||||||
//////////////////////////////初始化http模块//////////////////////////////////////////////
|
//////////////////////////////初始化http模块//////////////////////////////////////////////
|
||||||
//http = new HttpClient(*gsmmanger->client, "82.156.1.111");
|
//http = new HttpClient(*gsmmanger->client, "82.156.1.111");
|
||||||
if (IsNetOK)
|
if (IsNetOK)
|
||||||
{
|
{
|
||||||
ProgrameUper = new UpDateClassByme(httpserver->http1);
|
ProgrameUper = new UpDateClassByme(httpserver->http1);
|
||||||
}
|
}
|
||||||
@ -269,37 +378,103 @@ esp_task_wdt_init(20, true);
|
|||||||
IS1Sensor.initSensor();
|
IS1Sensor.initSensor();
|
||||||
String StationID = IS1Sensor.SensorInfo.serialnumber;
|
String StationID = IS1Sensor.SensorInfo.serialnumber;
|
||||||
String SensorID = IS1Sensor.SensorInfo.SensorName;
|
String SensorID = IS1Sensor.SensorInfo.SensorName;
|
||||||
|
if (IsNetOK)
|
||||||
|
{
|
||||||
|
ProgrameUper->initme(Curentvsion);
|
||||||
|
ProgrameUper->StationID=StationID;
|
||||||
|
ProgrameUper->CheckAndUpdate();
|
||||||
|
write_log(log_path,10,"Http Init Success.");
|
||||||
|
String Upheader = StationID + "##" + SensorID + "##" + String(IS1Sensor.SensorInfo.BandNum) + "##" + String(IS1Sensor.SensorInfo.a1,9) + ":" + String(IS1Sensor.SensorInfo.a2,9) + ":" + String(IS1Sensor.SensorInfo.a3,9) + ":" + String(IS1Sensor.SensorInfo.a4,9)+"##"+ProgrameUper->CurrentVersion;
|
||||||
|
Serial.println(Upheader);
|
||||||
|
httpserver->UpdateData(Http_Sensorinfo_UP_Path, (char *)Upheader.c_str(), Upheader.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ProgrameUper->initme(Curentvsion);
|
|
||||||
ProgrameUper->StationID=StationID;
|
|
||||||
ProgrameUper->CheckAndUpdate();
|
|
||||||
write_log(log_path,10,"Http Init Success.");
|
|
||||||
// ProgrameUper->DownloadFirmwareForurl("");
|
// ProgrameUper->DownloadFirmwareForurl("");
|
||||||
////////////////////////////上传IS1设备信息//////////////////////////////////////////////
|
////////////////////////////上传IS1设备信息//////////////////////////////////////////////
|
||||||
|
|
||||||
//////////////////////////////初始化IS1///////////////////////////////////////////////////
|
//////////////////////////////初始化IS1///////////////////////////////////////////////////
|
||||||
|
|
||||||
// String Date=getnetData();
|
// String Date=getnetData();
|
||||||
String Upheader = StationID + "##" + SensorID + "##" + String(IS1Sensor.SensorInfo.BandNum) + "##"
|
|
||||||
+ String(IS1Sensor.SensorInfo.a1,9) + ":" + String(IS1Sensor.SensorInfo.a2,9) + ":" + String(IS1Sensor.SensorInfo.a3,9) + ":" + String(IS1Sensor.SensorInfo.a4,9)+"##"+ProgrameUper->CurrentVersion;
|
|
||||||
Serial.println(Upheader);
|
|
||||||
httpserver->UpdateData(Http_Sensorinfo_UP_Path, (char *)Upheader.c_str(), Upheader.length());
|
|
||||||
write_log(log_path,10,"IS1 Init ....");
|
write_log(log_path,10,"IS1 Init ....");
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
httpserver-> http1->stop();
|
//httpserver-> http1->stop();
|
||||||
ticker.attach(60 * 60, Reuploaddata2);
|
|
||||||
|
// ticker.attach(10 * 60, Reuploaddata2);
|
||||||
write_log(log_path,10,"IS1 Init Success.");
|
write_log(log_path,10,"IS1 Init Success.");
|
||||||
///////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
log_data = "System Init Success";
|
log_data = "System Init Success";
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,"-------------------------------------------------system has been restart-----------------------------------------------------");
|
||||||
// Serial.println(gsmmanger->GetDataAndTime());
|
|
||||||
|
// --- 转换为毫秒 ---
|
||||||
|
const uint32_t WATCHDOG_TIMEOUT_MS = WATCHDOG_TIMEOUT_SECONDS * 1000;
|
||||||
|
|
||||||
|
// ------------------- 配置 TWDT -------------------
|
||||||
|
|
||||||
|
// 1. 定义配置结构体
|
||||||
|
esp_task_wdt_config_t twdt_config = {
|
||||||
|
.timeout_ms = WATCHDOG_TIMEOUT_MS, // 设置超时时间(毫秒)
|
||||||
|
|
||||||
|
// 监控核心 0 和核心 1 的空闲任务。
|
||||||
|
// 在 Arduino 环境中,通常 loop() 运行在核心 1 上 (如果启用了双核),
|
||||||
|
// 核心 0 处理 WiFi/蓝牙/网络栈。监控两者是系统级别的健壮做法。
|
||||||
|
// (1 << 0) | (1 << 1) == 0b11 == 3
|
||||||
|
.idle_core_mask = (1 << 0) | (1 << 1),
|
||||||
|
|
||||||
|
// 当 TWDT 超时时,触发系统复位(false),而不是触发软件 panic(true)。
|
||||||
|
.trigger_panic = false,
|
||||||
|
};
|
||||||
|
esp_err_t err = esp_task_wdt_init(&twdt_config);
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
Serial.printf("TWDT initialization failed: %s\n", esp_err_to_name(err));
|
||||||
|
// 如果 TWDT 初始化失败,可能需要重启或报警
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 将当前的 loop 任务(运行你的 getDateFromHttp 的任务)添加到 TWDT 监控列表
|
||||||
|
loopTaskHandle = xTaskGetCurrentTaskHandle();
|
||||||
|
|
||||||
|
if (esp_task_wdt_add(loopTaskHandle) != ESP_OK) {
|
||||||
|
Serial.println("Failed to add loop task to TWDT!");
|
||||||
|
} else {
|
||||||
|
Serial.printf("TWDT initialized and monitoring loop task for %d ms (%d s)\n",
|
||||||
|
WATCHDOG_TIMEOUT_MS, WATCHDOG_TIMEOUT_SECONDS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
String lastdate="";
|
String lastdate="";
|
||||||
|
dateandtime temnow = {2025, 1, 1, 0, 0, 0};
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
|
if (xEventGroupGetBits(Eventgroup) & STOP_WORK_BIT)
|
||||||
|
{
|
||||||
|
Serial.println("system stop work NOW!!");
|
||||||
|
|
||||||
|
|
||||||
|
xEventGroupClearBits(Eventgroup, STOP_WORK_BIT);
|
||||||
|
xEventGroupWaitBits(Eventgroup, StART_WORK_BIT, pdTRUE, pdFALSE, portMAX_DELAY);
|
||||||
|
Serial.println("system start work");
|
||||||
|
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xEventGroupGetBits(Eventgroup) & START_MSC_BIT)
|
||||||
|
{
|
||||||
|
Serial.println("start msc now");
|
||||||
|
xEventGroupClearBits(Eventgroup, START_MSC_BIT);
|
||||||
|
setupmsc();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
vTaskDelay(1000);
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
|
/* code */
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
String Date;
|
String Date;
|
||||||
|
|
||||||
/////////////////NOW/////////////////////
|
/////////////////NOW/////////////////////
|
||||||
@ -310,13 +485,15 @@ void loop()
|
|||||||
|
|
||||||
String yuliang = String(myslave.getYuliang());
|
String yuliang = String(myslave.getYuliang());
|
||||||
delay(1010);
|
delay(1010);
|
||||||
Serial.println("yuliang "+yuliang);
|
// Serial.println("yuliang "+yuliang);
|
||||||
|
|
||||||
write_log(log_path,10,"getYuliang :"+yuliang);
|
write_log(log_path,10,"getYuliang :"+yuliang);
|
||||||
|
|
||||||
/////////////////NOW/////////////////////
|
/////////////////NOW/////////////////////
|
||||||
String yuliangfz = String(myslave.getYuliang());
|
String yuliangfz = String(myslave.getYuliang());
|
||||||
delay(1010);
|
delay(1010);
|
||||||
Serial.println("fuzhao " + yuliangfz);
|
// Serial.println("fuzhao " + yuliangfz);
|
||||||
|
|
||||||
log_data ="fuzhao :"+yuliangfz;
|
log_data ="fuzhao :"+yuliangfz;
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
|
|
||||||
@ -328,43 +505,57 @@ void loop()
|
|||||||
float TT = (windret[7] * 256 + windret[8]) * 1.0 / 100;
|
float TT = (windret[7] * 256 + windret[8]) * 1.0 / 100;
|
||||||
float HH = (windret[9] * 256 + windret[10]) * 1.0 / 100;
|
float HH = (windret[9] * 256 + windret[10]) * 1.0 / 100;
|
||||||
long PP = (windret[13] * 256 + windret[14]) * 256 * 256 + (windret[11] * 256 + windret[12]);
|
long PP = (windret[13] * 256 + windret[14]) * 256 * 256 + (windret[11] * 256 + windret[12]);
|
||||||
Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
|
//Serial.println("VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
|
||||||
write_log(log_path,10,"VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
|
write_log(log_path,10,"VV:" + String(VV) + "DD:" + String(DD) + "TT:" + String(TT) + "HH:" + String(HH) + "PP:" + String(PP));
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////NOW///////////////////////////
|
////////////////////////////NOW///////////////////////////
|
||||||
String temprature =String(myslave.getMLX());
|
String temprature =String(myslave.getMLX());
|
||||||
Serial.println("wendu");
|
|
||||||
Serial.println(temprature);
|
|
||||||
log_data ="wendu :"+temprature;
|
log_data ="wendu :"+temprature;
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
|
|
||||||
////sim 循环
|
////sim 循环
|
||||||
|
|
||||||
write_log(log_path,10,"start gsmmanger->loop()");
|
write_log(log_path,10,"start gsmmanger->loop()");
|
||||||
gsmmanger->loop();
|
if (IsNetOK)
|
||||||
|
{
|
||||||
|
gsmmanger->loop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef DINBIAO
|
#ifdef DINBIAO
|
||||||
String Datenow1= httpserver->getnetData();
|
String Datenow1= httpserver->getnetData();
|
||||||
Datenow =fenge(Datenow1, " ", 0) + "_" + fenge(fenge(Datenow1, " ", 1), ":", 0) + "_" + fenge(fenge(Datenow1, " ", 1), ":", 1) + "_" + fenge(fenge(Datenow1, " ", 1), ":", 2);
|
Datenow =fenge(Datenow1, " ", 0) + "_" + fenge(fenge(Datenow1, " ", 1), ":", 0) + "_" + fenge(fenge(Datenow1, " ", 1), ":", 1) + "_" + fenge(fenge(Datenow1, " ", 1), ":", 2);
|
||||||
IS1Sensor.PrintFunc=printbytcp;
|
IS1Sensor.PrintFunc=printbytcp;
|
||||||
#endif
|
#endif
|
||||||
write_log(log_path,10,"start TakeOneJob()");
|
write_log(log_path,10,"start TakeOneJob()");
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
IS1Sensor.TakeOneJob(); ////IS1采集一次
|
IS1Sensor.TakeOneJob(); ////IS1采集一次
|
||||||
String StationID = IS1Sensor.SensorInfo.serialnumber;
|
String StationID = IS1Sensor.SensorInfo.serialnumber;
|
||||||
String SensorID = IS1Sensor.SensorInfo.SensorName;
|
String SensorID = IS1Sensor.SensorInfo.SensorName;
|
||||||
|
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
|
|
||||||
///////////////获取时间
|
///////////////获取时间
|
||||||
////////通过GPS获取时间,如果获取失败就通过4G访问网页获取。如果获取成功那就对GPS数据进行分割解析出时间。
|
////////通过GPS获取时间,如果获取失败就通过4G访问网页获取。如果获取成功那就对GPS数据进行分割解析出时间。
|
||||||
String gpsbac;
|
String gpsbac;
|
||||||
for(int i = 0 ;i < 5 ; i++)
|
for(int i = 0 ;i < 5 ; i++)
|
||||||
{
|
{
|
||||||
write_log(log_path,10,"start getnetData()");
|
write_log(log_path,10,"start getnetData()");
|
||||||
Date = httpserver->getnetData();
|
if (IsNetOK)
|
||||||
|
{
|
||||||
|
Date = httpserver->getnetData();
|
||||||
|
}else{
|
||||||
|
Date="error";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(Date == "error")
|
if(Date == "error")
|
||||||
{
|
{
|
||||||
write_log(log_path,10,"start get_GPS()");
|
write_log(log_path,10,"start get_GPS()");
|
||||||
Date = get_GPS();
|
Date = get_GPS();
|
||||||
if(Date != "-1")
|
if(Date != "-1" & IsNetOK)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
if(hassend == 0)
|
if(hassend == 0)
|
||||||
@ -380,7 +571,8 @@ void loop()
|
|||||||
// sdcard::WriteStringToFile(nameoffile, temp, lennn);
|
// sdcard::WriteStringToFile(nameoffile, temp, lennn);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
Serial.println("Finish Put StationGPSinfo Data");
|
|
||||||
|
write_log(log_path,10,"Finish Put StationGPSinfo Data");
|
||||||
}
|
}
|
||||||
delete[] temp;
|
delete[] temp;
|
||||||
|
|
||||||
@ -392,6 +584,7 @@ void loop()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Date=getlocaltime();
|
||||||
// break;
|
// break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,14 +601,25 @@ void loop()
|
|||||||
vTaskDelay(500);
|
vTaskDelay(500);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
|
temnow.year=Date.substring(0,4).toInt();
|
||||||
|
temnow.month=Date.substring(5,7).toInt();
|
||||||
|
temnow.day=Date.substring(8,10).toInt();
|
||||||
|
temnow.hour=Date.substring(11,13).toInt();
|
||||||
|
temnow.minute=Date.substring(14,16).toInt();
|
||||||
|
temnow.second=Date.substring(17,19).toInt();
|
||||||
|
setoffsettime(temnow);
|
||||||
write_log(log_path,10,"Date is : "+Date);
|
write_log(log_path,10,"Date is : "+Date);
|
||||||
// delay(15000);
|
// delay(15000);
|
||||||
if (fenge(Date, " ", 0)!=lastdate)
|
if (fenge(Date, " ", 0)!=lastdate)
|
||||||
{
|
{
|
||||||
lastdate=fenge(Date, " ", 0);
|
lastdate=fenge(Date, " ", 0);
|
||||||
log_path = "/log/"+lastdate+".log";
|
log_path = "/log/"+lastdate+".log";
|
||||||
|
setpathforlog(log_path);
|
||||||
myslave.claeryuliang();
|
myslave.claeryuliang();
|
||||||
ProgrameUper->CheckAndUpdate();
|
if(IsNetOK)
|
||||||
|
{ ProgrameUper->CheckAndUpdate();}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,31 +646,51 @@ void loop()
|
|||||||
{
|
{
|
||||||
//temp[Upheader.length()+i]=str[i];
|
//temp[Upheader.length()+i]=str[i];
|
||||||
}
|
}
|
||||||
Serial.println("lenth of up data is "+String(lennn));
|
// Serial.println("lenth of up data is "+String(lennn));
|
||||||
|
write_log(log_path,10,"lenth of up data is "+String(lennn));
|
||||||
memcpy(temp + Upheader.length(), IS1Sensor.UpData,IS1Sensor.SensorInfo.BandNum * 2);
|
memcpy(temp + Upheader.length(), IS1Sensor.UpData,IS1Sensor.SensorInfo.BandNum * 2);
|
||||||
bool flagsucc = httpserver->UpdateData(Http_Sepctral_Path, temp, lennn);
|
bool flagsucc = httpserver->UpdateData(Http_Sepctral_Path, temp, lennn);
|
||||||
//输出前100个字节 字符
|
//输出前100个字节 字符
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
|
// Serial.println("temp is :");
|
||||||
|
// Serial.write(temp, 100);
|
||||||
|
// write_log(log_path,10,"temp is :");
|
||||||
|
|
||||||
Serial.println("temp is :");
|
// for (int i = 0; i < 100 && i < lennn; i++)
|
||||||
Serial.write(temp, 100);
|
// {
|
||||||
|
// Serial.print(temp[i], HEX);
|
||||||
|
// Serial.print(" ");
|
||||||
|
// }
|
||||||
|
String log_temp="temp is :";
|
||||||
for (int i = 0; i < 100 && i < lennn; i++)
|
for (int i = 0; i < 100 && i < lennn; i++)
|
||||||
{
|
{
|
||||||
Serial.print(temp[i], HEX);
|
log_temp+=String(temp[i], HEX)+" ";
|
||||||
Serial.print(" ");
|
|
||||||
}
|
}
|
||||||
|
write_log(log_path,10,log_temp);
|
||||||
|
|
||||||
|
|
||||||
vTaskDelay(3000);
|
vTaskDelay(3000);
|
||||||
if (!flagsucc)
|
if (!flagsucc)
|
||||||
{
|
{
|
||||||
|
//计算md5并保存 为读取时判断数据是否正确
|
||||||
|
MD5Builder md5my;
|
||||||
|
md5my.begin();
|
||||||
|
md5my.add((uint8_t *)temp, lennn);
|
||||||
|
md5my.calculate();
|
||||||
|
String md5string = md5my.toString();
|
||||||
|
sdcard::lock();
|
||||||
sdcard::WriteStringToFile(Upname, temp, lennn);
|
sdcard::WriteStringToFile(Upname, temp, lennn);
|
||||||
log_data ="Up_data upload failed,save to SD.";
|
sdcard::WriteStringToFile(Upname + ".md5", (char *)md5string.c_str(), md5string.length());
|
||||||
|
sdcard::unlock();
|
||||||
|
|
||||||
|
|
||||||
|
log_data ="Up_data upload failed,save to SD. md5 is"+md5string;
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Serial.println("finish Put Up Data");
|
|
||||||
|
write_log(log_path,10,"finish Put Up Data");
|
||||||
log_data ="finish Put Up Data.";
|
log_data ="finish Put Up Data.";
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
}
|
}
|
||||||
@ -475,7 +699,7 @@ void loop()
|
|||||||
|
|
||||||
|
|
||||||
//////////////////////上传Down数据//////////////////
|
//////////////////////上传Down数据//////////////////
|
||||||
write_log(log_path,10,"put dowm data");
|
write_log(log_path,0,"put dowm data");
|
||||||
lennn = IS1Sensor.SensorInfo.BandNum * 2 + Downheader.length();
|
lennn = IS1Sensor.SensorInfo.BandNum * 2 + Downheader.length();
|
||||||
temp = new char[lennn];
|
temp = new char[lennn];
|
||||||
memcpy(temp, Downheader.c_str(), Downheader.length());
|
memcpy(temp, Downheader.c_str(), Downheader.length());
|
||||||
@ -485,22 +709,38 @@ void loop()
|
|||||||
{
|
{
|
||||||
// temp[Downheader.length()+i]=str[i];
|
// temp[Downheader.length()+i]=str[i];
|
||||||
}
|
}
|
||||||
Serial.println("lenth of down data is "+String(lennn));
|
|
||||||
|
write_log(log_path,10,"lenth of down data is "+String(lennn));
|
||||||
memcpy(temp + Downheader.length(), IS1Sensor.DownData,IS1Sensor.SensorInfo.BandNum * 2);
|
memcpy(temp + Downheader.length(), IS1Sensor.DownData,IS1Sensor.SensorInfo.BandNum * 2);
|
||||||
flagsucc = httpserver->UpdateData(Http_Sepctral_Path, temp, lennn);
|
flagsucc = httpserver->UpdateData(Http_Sepctral_Path, temp, lennn);
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
vTaskDelay(3000);
|
vTaskDelay(3000);
|
||||||
//输出前100个
|
String log_temp1="down data is :";
|
||||||
Serial.println("temp is :");
|
for (int i = 0; i < 100 && i < lennn; i++)
|
||||||
Serial.write(temp, 100);
|
{
|
||||||
|
log_temp1+=String(temp[i], HEX)+" ";
|
||||||
|
}
|
||||||
|
write_log(log_path,0,log_temp1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!flagsucc)
|
if (!flagsucc)
|
||||||
{
|
{
|
||||||
|
//计算md5并保存 为读取时判断数据是否正确
|
||||||
|
MD5Builder md5my;
|
||||||
|
md5my.begin();
|
||||||
|
md5my.add((uint8_t *)temp, lennn);
|
||||||
|
md5my.calculate();
|
||||||
|
String md5string = md5my.toString();
|
||||||
|
sdcard::lock();
|
||||||
sdcard::WriteStringToFile(Downname, temp, lennn);
|
sdcard::WriteStringToFile(Downname, temp, lennn);
|
||||||
log_data ="Down_data upload failed,save to SD.";
|
sdcard::unlock();
|
||||||
|
sdcard::WriteStringToFile(Downname + ".md5", (char *)md5string.c_str(), md5string.length());
|
||||||
|
log_data ="Down_data upload failed,save to SD. md5 is"+md5string;
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
}else{
|
}else{
|
||||||
Serial.println("finish Put Down Data");
|
|
||||||
log_data ="finish Put Down Data.";
|
log_data ="finish Put Down Data.";
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
}
|
}
|
||||||
@ -512,24 +752,73 @@ void loop()
|
|||||||
memcpy(temp, senderID.c_str(), senderID.length());
|
memcpy(temp, senderID.c_str(), senderID.length());
|
||||||
memcpy(temp + senderID.length(), windret + 3, 12);
|
memcpy(temp + senderID.length(), windret + 3, 12);
|
||||||
flagsucc = httpserver->UpdateData(Http_Wind_Path, temp, lennn, "application/json");
|
flagsucc = httpserver->UpdateData(Http_Wind_Path, temp, lennn, "application/json");
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
vTaskDelay(3000);
|
vTaskDelay(3000);
|
||||||
if (!flagsucc)
|
if (!flagsucc)
|
||||||
{
|
{
|
||||||
|
// 计算md5并保存 为读取时判断数据是否正确
|
||||||
|
MD5Builder md5my;
|
||||||
|
md5my.begin();
|
||||||
|
md5my.add((uint8_t *)temp, lennn);
|
||||||
|
md5my.calculate();
|
||||||
|
String md5string = md5my.toString();
|
||||||
|
|
||||||
|
sdcard::lock();
|
||||||
sdcard::WriteStringToFile(othername, temp, lennn);
|
sdcard::WriteStringToFile(othername, temp, lennn);
|
||||||
log_data ="put Other Data failed,save to SD.";
|
sdcard::WriteStringToFile(othername + ".md5", (char *)md5string.c_str(), md5string.length());
|
||||||
|
sdcard::unlock();
|
||||||
|
log_data="other_data upload failed.save to sd";
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
}else{
|
}else{
|
||||||
Serial.println("finish Put Other Data");
|
|
||||||
log_data ="finish Put Other Data.";
|
log_data ="finish Put Other Data.";
|
||||||
write_log(log_path,10,log_data);
|
write_log(log_path,10,log_data);
|
||||||
}
|
}
|
||||||
delete[] temp;
|
delete[] temp;
|
||||||
|
if (0)
|
||||||
|
|
||||||
|
{
|
||||||
|
String onelinestr="";
|
||||||
|
onelinestr="date:"+Date+",upshutter:"+String(IS1Sensor.shutterup)+",downshutter:"+String(IS1Sensor.shutterdown)+",StationID:"+StationID+"\n";
|
||||||
|
String fodernamer=fenge(Date, " ", 0);
|
||||||
|
sdcard::lock();
|
||||||
|
sdcard::Mkdir("/Data");
|
||||||
|
sdcard::Mkdir("/Data/"+fodernamer);
|
||||||
|
sdcard::unlock();
|
||||||
|
onelinestr+="UPDN,";
|
||||||
|
for (size_t i = 0; i < IS1Sensor.SensorInfo.BandNum; i++)
|
||||||
|
{
|
||||||
|
onelinestr+=String(IS1Sensor.UpData[i*2]*256+IS1Sensor.UpData[i*2+1]);
|
||||||
|
if (i!=IS1Sensor.SensorInfo.BandNum-1)
|
||||||
|
{
|
||||||
|
onelinestr+=",";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
onelinestr+="\n";
|
||||||
|
onelinestr+="DOWNDN,";
|
||||||
|
for (size_t i = 0; i < IS1Sensor.SensorInfo.BandNum; i++)
|
||||||
|
{
|
||||||
|
onelinestr+=String(IS1Sensor.DownData[i*2]*256+IS1Sensor.DownData[i*2+1]);
|
||||||
|
if (i!=IS1Sensor.SensorInfo.BandNum-1)
|
||||||
|
{
|
||||||
|
onelinestr+=",";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
onelinestr+="\n";
|
||||||
|
sdcard::lock();
|
||||||
|
|
||||||
|
sdcard::WriteStringToFile("/Data/"+fodernamer+"/"+datestring+".csv", (char *)onelinestr.c_str(), onelinestr.length());
|
||||||
|
sdcard::unlock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//结束并等待一定时间
|
//结束并等待一定时间
|
||||||
// http->stop(); delay(100);return;
|
// http->stop(); delay(100);return;
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
delay(120000);
|
delay(120000);
|
||||||
|
esp_task_wdt_reset(); //手动喂狗
|
||||||
#ifdef DINBIAO
|
#ifdef DINBIAO
|
||||||
abort();
|
abort();
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
|
|||||||
@ -46,7 +46,7 @@ struct STRSensorInfo
|
|||||||
#define GET_WAVELENGTH_CALIBRATION_COFF 0x55
|
#define GET_WAVELENGTH_CALIBRATION_COFF 0x55
|
||||||
#define GET_STAT_OF_LAMPOUT 0x60
|
#define GET_STAT_OF_LAMPOUT 0x60
|
||||||
#define SET_GPIO 0x61
|
#define SET_GPIO 0x61
|
||||||
#define byte u_char
|
#define byte uint8_t
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -110,6 +110,7 @@ size_t UpDateClassByme::DownloadFirmwareForurl(String version)
|
|||||||
|
|
||||||
void UpDateClassByme::initme(String Version)
|
void UpDateClassByme::initme(String Version)
|
||||||
{
|
{
|
||||||
|
Serial.println("CurrentVersion is:"+Version);
|
||||||
CurrentVersion=Version;
|
CurrentVersion=Version;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,7 +115,8 @@ void onRequest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onReceive(int len) {
|
void onReceive(int len) {
|
||||||
Serial.printf("onReceive[%d]: ", len);
|
//Serial.printf("onReceive[%d]: ", len);
|
||||||
|
Serial.println("onReceive:["+String(len)+"] ");
|
||||||
while (Wire.available()) {
|
while (Wire.available()) {
|
||||||
Serial.write(Wire.read());
|
Serial.write(Wire.read());
|
||||||
}
|
}
|
||||||
@ -124,7 +125,8 @@ void onReceive(int len) {
|
|||||||
|
|
||||||
|
|
||||||
void onReceive111(size_t len) {
|
void onReceive111(size_t len) {
|
||||||
Serial.printf("onReceive[%d]: ");
|
// Serial.printf("onReceive[%d]: ");
|
||||||
|
Serial.println("onReceive111:["+String(len)+"] ");
|
||||||
while (Wire.available()) {
|
while (Wire.available()) {
|
||||||
Serial.write(Wire.read());
|
Serial.write(Wire.read());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user