This commit is contained in:
2026-01-06 19:06:03 +03:30
parent 66a02f4584
commit abe1a64338
24 changed files with 2799 additions and 6053 deletions

172
Config.h Normal file
View File

@@ -0,0 +1,172 @@
#ifndef CONFIG_H
#define CONFIG_H
#include <Arduino.h>
// -------------------- پیکربندی --------------------
#define FLASH_CS PA4
#define FLASH_MOSI PA7
#define FLASH_MISO PA6
#define FLASH_SCK PA5
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define MQ7_PIN PA2
#define SDA_PIN PB9
#define SCL_PIN PB8
#define PWRKEY_PIN PB5
#define SENSOR_READ_INTERVAL 10000
#define POWER_PIN PA1
#define VOLTAGE_DIVIDER_PIN PA0 // پین خواندن ولتاژ
#define VOLTAGE_DIVIDER_RATIO 2.0 // نسبت تقسیم (R1=R2=10k => نسبت = 2)
#define ADC_REF_VOLTAGE 3.3 // ولتاژ مرجع ADC در STM32 (معمولاً 3.3V)
#define ADC_RESOLUTION 4096 // رزولوشن ADC 12-bit = 4096
// -------------------- آدرس‌های حافظه --------------------
#define CONFIG_ADDRESS 0x000000
#define DATA_ADDRESS 0x010000
// -------------------- آدرس حافظه داخلی STM32 --------------------
#define INTERNAL_CONFIG_ADDR 0x8007800 // آخرین صفحه فلش در STM32F103C8
// -------------------- انوم‌ها --------------------
enum SIMType { SIM_UNKNOWN = 0, SIM_HAMRAHE_AVAL = 1, SIM_IRANCELL = 2, SIM_RIGHTEL = 3 };
// -------------------- ساختارها --------------------
struct DeviceConfig {
char signature[4];
char deviceId[16];
char serverPhoneNumber[16];
char serverUrl[64];
unsigned long uploadInterval;
unsigned long smsInterval;
unsigned long saveInterval;
SIMType simType;
bool smsEnabled;
bool verified;
bool valid;
};
struct SensorData {
float temperature;
float humidity;
float coPPM;
float lightLux;
unsigned long timestamp;
uint8_t sent;
float volage;
int power;
};
// -------------------- توابع کمکی --------------------
inline String simTypeToString(SIMType type) {
switch(type) {
case SIM_HAMRAHE_AVAL: return "Hamrah Aval";
case SIM_IRANCELL: return "Irancell";
case SIM_RIGHTEL: return "Rightel";
default: return "Unknown";
}
}
inline String simTypeToAPN(SIMType type) {
switch(type) {
case SIM_HAMRAHE_AVAL: return "mcinet";
case SIM_IRANCELL: return "mtnirancell";
case SIM_RIGHTEL: return "rightel";
default: return "mcinet";
}
}
inline String generateVerificationCode(String tokenCode) {
long token = tokenCode.toInt();
long verification = (token * 7 + 12345) % 100000;
char buffer[6];
sprintf(buffer, "%05ld", verification);
return String(buffer);
}
#endif // CONFIG_H
// #ifndef CONFIG_H
// #define CONFIG_H
// #include <Arduino.h>
// // -------------------- پیکربندی --------------------
// #define FLASH_CS PA4
// #define FLASH_MOSI PA7
// #define FLASH_MISO PA6
// #define FLASH_SCK PA5
// #define SCREEN_WIDTH 128
// #define SCREEN_HEIGHT 64
// #define OLED_RESET -1
// #define MQ7_PIN PA2
// #define SDA_PIN PB9
// #define SCL_PIN PB8
// #define PWRKEY_PIN PB5
// #define SENSOR_READ_INTERVAL 60000
// // -------------------- آدرس‌های حافظه --------------------
// #define CONFIG_ADDRESS 0x000000
// #define DATA_ADDRESS 0x010000
// // -------------------- انوم‌ها --------------------
// enum SIMType { SIM_UNKNOWN = 0, SIM_HAMRAHE_AVAL = 1, SIM_IRANCELL = 2, SIM_RIGHTEL = 3 };
// // -------------------- ساختارها --------------------
// struct DeviceConfig {
// char signature[4];
// char deviceId[16];
// char serverPhoneNumber[16];
// char serverUrl[64];
// unsigned long uploadInterval;
// unsigned long smsInterval;
// unsigned long saveInterval;
// SIMType simType;
// bool smsEnabled;
// bool verified;
// bool valid;
// };
// struct SensorData {
// float temperature;
// float humidity;
// float coPPM;
// float lightLux;
// unsigned long timestamp;
// uint8_t sent;
// };
// // -------------------- توابع کمکی --------------------
// inline String simTypeToString(SIMType type) {
// switch(type) {
// case SIM_HAMRAHE_AVAL: return "Hamrah Aval";
// case SIM_IRANCELL: return "Irancell";
// case SIM_RIGHTEL: return "Rightel";
// default: return "Unknown";
// }
// }
// inline String simTypeToAPN(SIMType type) {
// switch(type) {
// case SIM_HAMRAHE_AVAL: return "mcinet";
// case SIM_IRANCELL: return "mtnirancell";
// case SIM_RIGHTEL: return "rightel";
// default: return "mcinet";
// }
// }
// inline String generateVerificationCode(String tokenCode) {
// long token = tokenCode.toInt();
// long verification = (token * 7 + 12345) % 100000;
// char buffer[6];
// sprintf(buffer, "%05ld", verification);
// return String(buffer);
// }
// #endif // CONFIG_H