пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

2025:
» скрыто
» скрыто
» скрыто
» панели
статьи для чтения:
» читать
Книги:
» "Политология" Сазонов Н.И.
» апгрейд обезьяны (для чтения)
8 семестр (госы):
» Теория политики
» Сравнительная политология
8 семестр (экзамены):
» Национальная безопасность
» Полит. менеджмент
» Охрана труда
» Государственное управление
» удали
» Європа міграція
8 семестр (зачёты):
» Теория партий и партийных систем
» Постмодерная политика
» Политическое лидерство
7 семестр:
» Кратология
» Терроризм и политика
» Химия
» панели

jk_bms промежуточный рабочий

/** 

pinMode(ledPin2, OUTPUT);
const int ledPin2 = 2;
 
char big_data[60000] = "val=";  //Объявляет большой буфер и задаёт начальное значение
sprintf(...)                    //Добавляет в конец форматированную строку

memset(big_data, 0, sizeof(big_data));   //Обнуляет (очищает) строку
strcat(big_data, "val=");                //Снова начинает строку с "val=" после очистки


char letter = 'X';
int number = 42;
float temp = 23.4567;
char name[] = "ESP32";

char buffer[100];
sprintf(buffer, "Char: %c, Int: %d, Float: %.2f, String: %s", letter, number, temp, name);


float some_data = %.2f
millis() = %d

String name = "ESP32";
sprintf(buffer, "Name: %s", name.c_str());

String name = "ESP32";
name.reserve(5000); // резервируем память для предотвращения фрагментации!
*/


#include <HTTPClient.h>
#include <WiFi.h>
#include <HardwareSerial.h>

HardwareSerial BMS(1);

String bmsResponseStr = ""; // ответ от бмс
String big_data = "";       // данные для отправки 
byte request[512]; // массив байтов ответа

int responseLength = 0; // для подсчета длины ответа
int loop_counter = 0;


  String b1;
  String b2;
  String b3;
  String b4;
  String total_voltage;
  String current;
  String soc;
  String battery_temp;
  String mosfet_temp;
  String discharging_on_off;
  String charging_on_off;

void wifi_connection(){

  //WiFi.begin("netis_kitchen", "password"); 
  WiFi.begin("netis_7AB60F", "password");  
  //WiFi.begin("netis_2.4G_007C9D", "d11v09n03");
  
  Serial.print("Connecting to WiFi");
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  WiFi.setHostname("solar_esp");

  Serial.print("OK! IP=");
  Serial.println(WiFi.localIP());
}


void send_http(){
  Serial.println("send_http_func");
  
  // Указываем URL и данные для POST запроса
  HTTPClient http;
  http.begin("https://fuguja.com/esp/solar.php");
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  
  // Отправляем POST запрос
  float httpResponseCode = http.POST(big_data);
  String payload;
  if (httpResponseCode == 200) {    
    payload = http.getString();  
  }
    
  http.end();  
}

 

void setup() {
  bmsResponseStr.reserve(10000); // резервируем 5000 бит
  big_data.reserve(80000); // резервируем 5000 бит

  b1.reserve(10);
  b2.reserve(10);
  b3.reserve(10);
  b4.reserve(10);
  total_voltage.reserve(10);
  current.reserve(10);
  soc.reserve(10);
  battery_temp.reserve(10);
  mosfet_temp.reserve(10);
  discharging_on_off.reserve(2);
  charging_on_off.reserve(2);
  
  BMS.begin(115200, SERIAL_8N1, 16, 17);

  big_data = "val=";
  
  delay(1000);
  
  Serial.begin(115200);
  wifi_connection();
  
}

void loop() {
  Serial.println(loop_counter);
  
  loop_counter++;

  if(loop_counter == 30){
    send_http(); // отправка
    
    Serial.println(big_data);
    loop_counter = 0;
    big_data = "val=";   

  }
  
   byte ask[] = {
    0x4E, 0x57, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00,
    0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x68, 0x00, 0x00, 0x01, 0x29
  };

  BMS.write(ask, sizeof(ask));
  delay(200); // даём BMS время ответить

  responseLength = 0;
  while (BMS.available()) {
    byte b = BMS.read();    
    if (responseLength < sizeof(request)) {
      request[responseLength++] = b;
    }
  }

  b1 = String((request[14] << 8) | request[15]); // 14 значит 15 и 16
  b2 = String((request[17] << 8) | request[18]); // 16 значит 17 и 18
  b3 = String((request[20] << 8) | request[21]); // 19 значит 20 и 21
  b4 = String((request[23] << 8) | request[24]); // 22 значит 23 и 24  
  total_voltage = String((request[35] << 8) | request[36]); // 83 | 34 значит 35 и 36
  current = String((request[38] << 8) | request[39]); // 84 ячейка | 37 номер массива (38 39)
  soc = String(request[41]); // 85 | 40 номер массива (41)    
  battery_temp = String((request[32] << 8) | request[33]); // 82 | 31 номер массива (32 33)
  mosfet_temp = String((request[26] << 8) | request[27]); // 80 |  25 (26 b 27)    
  discharging_on_off = String(request[151]); // ac | 150 (151)
  charging_on_off = String(request[149]); // ab | 148 (149)  
  
  
  
  big_data += "{b1:"+b1+"b2:"+b2+"b3:"+b3+"b4:"+b4+"v:"+total_voltage+"c:"+current+"soc:"+soc+"bt:"+battery_temp+"mt:"+mosfet_temp+"dch:"+discharging_on_off+"ch:"+charging_on_off+"wf:"+String(WiFi.RSSI())+"ms:"+String(millis())+"}";
  
  delay(5000);  // 10 секунд пауза перед следующим запросом  

 
}

 

 


23.04.2025; 11:42
хиты: 9
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2025. All Rights Reserved. помощь