Андрей Сергеевич
Ещё гидробака нехватает
Slava
Ага и аварийный клапан сброса давления можно добавить
romanetz
Вспоминаю, как мы подачу воды на нпске автоматизировали. Она там "в нагрузку" к технологии. Ну, типа, плк есть уже, ввод-вывод тоже, вот и запилили её туда. Насос там киловатт 5. Проектировщики думали, что можно гидроаккумулятор и без чрп обойтись.
romanetz
И датчик давления как раз, что-то типа метрана
romanetz
Ну так вот. В отсутствии ЧРП, единственное, что можно придумать - релейное управление с гистерезисом
romanetz
Давление падает слишком резко. Короче, решили лишнюю воду тупо под здание сливать
romanetz
Здание стоит на железных столбах
romanetz
Там болото сплошное
romanetz
А самое весёлое - скважина первого подъёма стоит за 1,5 километра от станции
romanetz
И это надо было видеть, как кабель до неё хоронили по всем буеракам
romanetz
romanetz
Ещё смешнее смотреть с какой скоростью сваливает народ, когда в силу чего-либо упущения пожарка (АСПТ) срабатывает в насосном зале
romanetz
Там качают уже пара насосов по 75 квт
Anonymous
Начал ESP32 осваивать. После Arduino IDE какие более продвинутые средства сейчас есть?
Ruslan
камрады, если есть разделы для OTA, нужен ли Factory раздел? вроде нет...
Ruslan
Denisio
Ruslan
камрады, если есть разделы для OTA, нужен ли Factory раздел? вроде нет...
Для базовой загрузки, раздел данных OTA не должен содержать данных (то есть все байты установлены в 0xFF). В этом случае загрузчик запустит базовое приложение, если оно присутствует в таблице разделов. Если такого приложения нет, то будет запущено приложение из первого доступного OTA слота, обычно это ota_0.
Ruslan
вот оно!!!
Ruslan
я вот это всё уже попробовал и пришёл к другому варианту
Ruslan
docker образ с ESP-IDF + любая IDE, которую ты знаешь - и всё это работает как часы!
Maxim
Здравствуйте! уважаемое сообщество скажите пожалуйста что нужно изменить в arduino ide коде при переходе с esp8266 на esp32. Код написан и отлажен для управление через mqtt сервер под esp8266 но нужно esp32 использовать. Библиотеки в ide я поставил. Дальше как быть ? Что в коде исправлять нужно.
Slava
Maxim
Slava
Кстати, а исходник, который ты переделываешь, рабочий?
Sergey
На 32 и 8266 немного разные библиотеки mqtt и вызовы немного по другому делаются. Смотри примеры в библиотеках
Maxim
Ruslan
камрады, можете поделиться запуском LAN8720, в пример не тыкайте, оно у меня не работает
B
Всем привет. Кто то отправлял get запросы через https на esp32?
Без загрузки сертификата и fingerprint в код.
Ruslan
ну сам подумай, зачем сертификат в HTTPS?
ВПК ПОТОК
B
B
Без сертификата на стороне клиента всё работает.
ВПК ПОТОК
Сертификат нужен серверу, а не клиенту
B
ВПК ПОТОК
Почему бы и нет?
Потому, что это не сервер. Нельзя кота назвать львом, да тоже семейство кошачьих, но это не лев
Юрий
ВПК ПОТОК
Для меня главная проблема. Это много поточность
romanetz
romanetz
Синхронизируй штатными средствами
Ivansuper
Там вроде даже из стандарта плюсов треды доступны и мьютексы
Роман
Всем привет, может кто помочь. Есть таск который обрабатывает два уарта у ESP32. По первому идут комманды, по второму JPEG картинка.
while(1)
{
if(mf1_wait_data(mf1_answer, &mf1_answer_length))
{
if(strstr((const char*)mf1_answer, "\"liveness\":1") )
{
memset(mf1_answer, 0 , MF1_JSON_BUF_SIZE);
memset(mf1_jpeg, 0, MF1_JPEG_BUF_SIZE / 2);
mf1_jpeg_length = 0;
if(mf1_jpeg_read(mf1_jpeg, &mf1_jpeg_length))
{
if(mf1_jpeg_length > 3200)
{
printf("[CAM] JPEG len=%d\n", mf1_jpeg_length);
}
}
}
}
}
В нем в некоторые промежутки происходит ошибка (xQueueGenericReceive)- assert failed!
abort() was called at PC 0x40091995 on core 0
Ivansuper
Такое у меня часто было когда хендлеры на очереди были занулены в виду моих ошибок
Роман
Ivansuper
Скорее всего внутри функций mf1_* какая то беда
Роман
Две функции, одна читает комманды ., вторая фотку
bool mf1_wait_data(uint8_t* data, uint16_t *len)
{
bool ret = false;
uint16_t rx_len = uart_read_bytes(MF1_JSON_PORT, data, MF1_JSON_BUF_SIZE, READ_TICS);
if(rx_len>0)
{
*len = rx_len;
ret = true;
}
return ret;
}
bool mf1_jpeg_read(uint8_t *data, uint16_t *len)
{
bool ret = false;
uint8_t byte = 0;
uint8_t byte_last = 0;
uint16_t jpg_len = 0;
while(true)
{
uart_read_bytes(MF1_JPEG_PORT, &byte, 1, READ_TICS);
if(byte_last == 0xFF && byte == 0xD8)
{
printf("[JPEG] Start found\n");
jpg_len = 2;
data[0] = byte_last;
data[1] = byte;
while(true)
{
uart_read_bytes(MF1_JPEG_PORT, &byte, 1, READ_TICS);
data[jpg_len] = byte;
jpg_len = jpg_len + 1;
if(byte_last == 0xFF && byte == 0xD9)
{
printf("[JPEG] Stop found\n");
break;
}
byte_last = byte;
}
//printf("[JPEG] Len=%d\n", jpg_len);
*len = jpg_len;
ret = true;
break;
}
byte_last = byte;
}
return ret;
}
Ivansuper
можно поподробнее?
Ну там дело касается очередей и семафоров freertos. У тебя их ту нет, значит используемый тобою код внутри где то за них цепляется
Ivansuper
А стек выполнения пробовал восстанавливать? Т.е. откуда оно до ассерта дошло
Роман
еще бывает такая ошибка
Роман
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Ivansuper
Две функции, одна читает комманды ., вторая фотку
bool mf1_wait_data(uint8_t* data, uint16_t *len)
{
bool ret = false;
uint16_t rx_len = uart_read_bytes(MF1_JSON_PORT, data, MF1_JSON_BUF_SIZE, READ_TICS);
if(rx_len>0)
{
*len = rx_len;
ret = true;
}
return ret;
}
bool mf1_jpeg_read(uint8_t *data, uint16_t *len)
{
bool ret = false;
uint8_t byte = 0;
uint8_t byte_last = 0;
uint16_t jpg_len = 0;
while(true)
{
uart_read_bytes(MF1_JPEG_PORT, &byte, 1, READ_TICS);
if(byte_last == 0xFF && byte == 0xD8)
{
printf("[JPEG] Start found\n");
jpg_len = 2;
data[0] = byte_last;
data[1] = byte;
while(true)
{
uart_read_bytes(MF1_JPEG_PORT, &byte, 1, READ_TICS);
data[jpg_len] = byte;
jpg_len = jpg_len + 1;
if(byte_last == 0xFF && byte == 0xD9)
{
printf("[JPEG] Stop found\n");
break;
}
byte_last = byte;
}
//printf("[JPEG] Len=%d\n", jpg_len);
*len = jpg_len;
ret = true;
break;
}
byte_last = byte;
}
return ret;
}
Ты во второй функции берешь адрес поинтера на data. Ты уверен?
Ivansuper
А
Ivansuper
Там байт. Сорян не увидел в телеграме
Роман
да там байт
Ivansuper
Вообщем хз, у меня глаза плывут тут читать код без подсветки. Пока ничего не вижу кроме того, что функцией ожидания данных в теории ты можешь прочитать больше чем надо откусив часть потока для жпега
Ivansuper
Ну и то что ты наглухо в цикле читаешь все без выхода и yield
Andy
Всем привет, может кто помочь. Есть таск который обрабатывает два уарта у ESP32. По первому идут комманды, по второму JPEG картинка.
while(1)
{
if(mf1_wait_data(mf1_answer, &mf1_answer_length))
{
if(strstr((const char*)mf1_answer, "\"liveness\":1") )
{
memset(mf1_answer, 0 , MF1_JSON_BUF_SIZE);
memset(mf1_jpeg, 0, MF1_JPEG_BUF_SIZE / 2);
mf1_jpeg_length = 0;
if(mf1_jpeg_read(mf1_jpeg, &mf1_jpeg_length))
{
if(mf1_jpeg_length > 3200)
{
printf("[CAM] JPEG len=%d\n", mf1_jpeg_length);
}
}
}
}
}
В нем в некоторые промежутки происходит ошибка (xQueueGenericReceive)- assert failed!
abort() was called at PC 0x40091995 on core 0
" assert failed!" - найти этот assert и понять какого фига!
Ivansuper
Ivansuper
components\freertos\queue.c
Если интересно
Роман
Ребят, подключаю MQTT на ESP32 сперва к своему серверу, все работает отлично, никаких ошибок, как только к серверу клиента, то такая фигня
I (24724) [MQTT]: MQTT_EVENT_CONNECTED
I (37644) [MQTT]: MQTT_EVENT_PUBLISHED, msg_id=6462
E (40784) MQTT_CLIENT: mqtt_message_receive: transport_read() error: errno=128
E (40794) MQTT_CLIENT: mqtt_process_receive: mqtt_message_receive() returned -1
I (40794) [MQTT]: MQTT_EVENT_DISCONNECTED
И так повторяется через раз. При чем пкбликует и потом переконектится после ошибки
Вик Аник
Вик Аник
ну раз пока не отвечают, выложу своё
Прошу не ломать 3 минуты
Вик Аник
Вик Аник
все знают эту схему
Вик Аник
я с ней запарился и слепил такое
Вик Аник
Вик Аник
также сделал плату с ESP32 CAM
Вик Аник
Вик Аник
получилось так
Вик Аник