Есть грубое эмпирическое правило (не помню откуда оно взялось), что размер модели в миллиардах параметров примерно соответствует количеству гигабайт оперативной памяти машины, на которой ты хочешь эту модель запустить. То есть модель на 120 миллиардов параметров можно запустить на железе со 128 Гб оперативки.
Число параметров надо умножить на формат параметра.
Если модель имеет 120 миллиардов параметров, то запустить ее на железе со 128 ГБ оперативки возможно при формате FP8.
Для запуска с форматом FP32 (полная точность) требуемый объем оперативки составит 512 ГБ.
Если используете расширитель, то тоже решаете программно.
------------------------
Дополнительные два пина потребуют добавления одной команды в вашей программе - это команда смены адреса шины SDA. Это самое простое решение и упрощает сборку.
Начали смотреть шину I2C-сканером и нашли только один адрес 0х53. Пу пу пу, начали гуглить как задавать адрес этим датчикам. Везде писали про какие-то контакты XSHUT и GPIO1. А у нас таких не было...
простой способ включения трех датчиков с одинаковыми адресами это подключить SDA к отдельным пинам, а SCL - сделать общим. В итоге нет надобности изменять адрес и не нужен расширитель I2C.
Вы купили в собственность именно готовое "железо". Документацию на его разработку или производство Вы можете купить, но это другие деньги. Изучать Вам никто не запрещает. просто если сломаете, то ремонт за Ваш счет.
Вы можете установить любое ПО, удалив все установленное. Что Вам дали в пользование и что вы можете добавлять или удалять решает собственник ПО. Ваши права оговорены в лицензии на ПО. Увы, но это реальность.
Все библиотеки, кроме nlohmann/json, подходят для устройств с оперативной памятью от 2 КБ. Для проектов с критичным потреблением памяти выбирайте JSMN или cJSON.
В колодце не испытывал.Работал с этими датчиками лишь в помещении. Вот некоторые из них:
До кучи...
http://www.gbppr.net/kraken/KrakenSDR_Pi4_Passive_Radar_Step-by-Step.pdf
https://github.com/krakenrf/krakensdr_doa
https://github.com/krakenrf/krakensdr_docs
https://github.com/krakenrf/heimdall_daq_fw
Подскажите, что такое "Rоманда"?
Для такой задачи вполне подходит ESP12. Если надо BLE , то лучше взять модули других фирм, например такой:
А почему не взяли бесконтактный метод определения уровня? Например, ультразвуковой датчик (цена 50 руб) и реле для включения насоса(50 руб.).
Это керамическая антенна 4.3DBI .Она припаяна.
Если не нравится керамика, то есть такой вариант с печатной антенной, еще дешевле, но модуль больше по размеру
До кучи...
Если взять вот этот модуль
Вместо взятого в статье, то цена модуля составит не 300-600руб, а 140 руб
Кроме того, этот модуль примерно 3 раза меньше по длине.
Блок питания можно взять , например, такой:
и спрятать его в коробку вместе модулем ESP32, что по размерам как модуль в статье, но без блока питания.
Геркон можно взять такой же, но дешевле:
До кучи...
Возможно знаете, но не увидел упоминание в статье.
10 лет назад пользователь под ником cnlohr сделал аналоговый интерфейс NTSC на ESP8266.
https://github.com/cnlohr/channel3
статья на хабре от 2016 https://habr.com/ru/articles/391857/
2 года назад добавлен интерфейс PAL.
это повтор решения 2 года назад:
https://www.instructables.com/ESP8266-NTSC-Analog-TV-Broadcast-on-Channel-3/
это решение на ESP32 6 лет назад:
https://bitluni.net/esp32-color-pal
-----------------------------
это Библиотека ESP32, которая генерирует композитный видеосигнал для PAL, SECAM и NTSC. 3 года назад.
https://github.com/aquaticus/esp32_composite_video_lib
пример видео на ESP32.
https://www.instructables.com/Hacking-Idea/
Поправьте, "б" -это "бит", а байт - это "Б".
Число параметров надо умножить на формат параметра.
Если модель имеет 120 миллиардов параметров, то запустить ее на железе со 128 ГБ оперативки возможно при формате FP8.
Для запуска с форматом FP32 (полная точность) требуемый объем оперативки составит 512 ГБ.
Ошибся с числом команд.
На Ардуине аппаратно лишь один I2C.
На ESP32 - два I2C.
Для трех I2C надо использовать программную реализацию I2C для дополнительных к аппаратным каналам.
https://github.com/tremaru/iarduino_I2C_Software
Если используете расширитель, то тоже решаете программно.
------------------------
Дополнительные два пина потребуют добавления одной команды в вашей программе - это команда смены адреса шины SDA. Это самое простое решение и упрощает сборку.
Надо взять два любых свободных пина GPIO.
Тогда используйте еще два пина у микроконтроллера.
простой способ включения трех датчиков с одинаковыми адресами это подключить SDA к отдельным пинам, а SCL - сделать общим. В итоге нет надобности изменять адрес и не нужен расширитель I2C.
Вот защитное стекло для этого датчика:
А это датчик, но уже с защитным стеклом и есть все контакты, которые вы искали.
Вы купили в собственность именно готовое "железо". Документацию на его разработку или производство Вы можете купить, но это другие деньги. Изучать Вам никто не запрещает. просто если сломаете, то ремонт за Ваш счет.
Вы можете установить любое ПО, удалив все установленное. Что Вам дали в пользование и что вы можете добавлять или удалять решает собственник ПО. Ваши права оговорены в лицензии на ПО. Увы, но это реальность.
На железо у Вас есть право собственности. На софт Вы покупаете лишь право пользования и хранения.
Что скажите про эти библиотеки:
--------------------------------------
Рекомендации DeepSeek :
1. ArduinoJson (самая популярная)
Плюсы: Легковесная, простая в использовании, отличная документация
Поддерживаемые архитектуры: AVR, ARM, ESP8266, ESP32
Особенности: Поддержка как десериализации, так и сериализации
cpp
2. jansson (порт для embedded)
Плюсы: Полнофункциональная, стандартный API
Минусы: Требует больше памяти
Лучше подходит для: Более мощных микроконтроллеров (ESP32, STM32)
3. cJSON
Плюсы: Минималистичная, переносимая, только C
Размер: ~10KB ROM
Поддержка: ARM, AVR, ESP
4. JsonParser
Плюсы: Очень легкая, только парсинг
Размер: ~2-4KB ROM
Лучше для: Только чтения JSON
5. Microjson (минималистичная)
Плюсы: Крайне малый размер, только парсинг
Размер: ~1.5KB ROM
Рекомендации по выбору:
Для AVR/ATmega: ArduinoJson или Microjson
Для ESP8266/ESP32: ArduinoJson или cJSON
Для STM32: ArduinoJson или jansson
Если нужно только парсить: JsonParser или Microjson
ArduinoJson обычно是最好的 выбор для большинства проектов благодаря балансу функциональности и эффективности использования памяти.
=============================
Рекомендации GLM:
Ниже представлен обзор популярных библиотек для работы с JSON на микроконтроллерах с учётом их особенностей и ограничений по ресурсам:
1. ArduinoJson (рекомендуется для Arduino/ESP)
Платформы: Arduino, ESP8266, ESP32, STM32 и др.
Особенности:
Оптимизировано для устройств с ограниченным объёмом памяти (ОЗУ/Флэш).
Поддерживает сериализацию (создание
Удобный API, интеграция с Arduino IDE
Автоматическое управление памятью (статический или динамический пул).
Пример:
#include <ArduinoJson.h>
void setup() {
StaticJsonDocument<200> doc; // Выделяем 200 байт
doc["sensor"] = "temperature";
doc["value"] = 25.5;
serializeJson(doc, Serial); // Вывод: {"sensor":"temperature","value":25.5}
}
Ссылка: [arduinojson.org](https://arduino
2. cJSON (лёгкая библиотека на C)
Платформы: любые микроконтроллеры (STM32, AVR, ESP32 и др.).
Особенности:
Минималистичная (один файл:
cJSON.c+cJSON.h).Не требует динамической памяти (но может использовать
malloc).Поддерживает парсинг и генерацию JSON.
Низкое потребление RAM.
Пример:
#include "cJSON.h"
void parse_json(const char *json) {
cJSON *root = cJSON_Parse(json);
cJSON *value = cJSON_GetObjectItem(root, "value");
printf("Value: %f\n", value->valuedouble);
cJSON_Delete(root);
}
Ссылка: GitHub — DaveGamble/cJSON
3. JSMN (минималистичный парсер на C)
Платформы: устройства с крайне ограниченным объёмом памяти (ATtiny, MSP430).
Особенности:
Только парсинг (без генерации JSON).
Не использует
malloc(работает с буфером).Очень маленький размер кода (~1 КБ).
Требует ручной обработки токенов.
Пример:
#include "jsmn.h"
void parse_json(const char *json) {
jsmn_parser parser;
jsmntok_t tokens[10];
jsmn_init(&parser);
int count = jsmn_parse(&parser, json, strlen(json), tokens, 10);
// Обработка токенов вручную...
}
Ссылка: GitHub — zserge/jsmn
4. Mongoose OS (сетевая библиотека с поддержкой JSON)
Платформы: ESP32, ESP8266, STM32.
Особенности:
Включает парсер JSON как часть сетевой библиотеки.
Поддержка MQTT, HTTP, WebSocket.
Требует больше ресурсов, чем cJSON/JSMN.
Пример:
#include "mgos.h"
void handler(struct mg_connection nc, int ev, void ev_data) {
struct mg_http_message hm = (struct mg_http_message ) ev_data;
double value = json_get_double(hm->body, "$.value");
printf("Value: %f\n", value);
}
Ссылка: cesanta.com/mongoose
5. nlohmann/json (для мощных микроконтроллеров)
Платформы: ESP32, STM32H7, Teensy 4.x.
Особенности:
Современный C++ API (удобный, но ресурсоёмкий).
Требуется C++11 и поддержка STL.
Не рекомендуется для маломощных микроконтроллеров (из-за высокого потребления оперативной памяти).
Пример:
#include <nlohmann/json.hpp>
void parse_json(const std::string &json) {
auto doc = nlohmann::json::parse(json);
float value = doc["value"];
Serial.println(value);
}
Ссылка: GitHub — nlohmann/json
6. PicoJSON (лёгкая альтернатива nlohmann)
Платформы: ESP32, STM32.
Особенности:
Компакт
Поддерживает парсинг и генерацию.
Меньше ресурсов, чем у nlohmann/json
Ссылка: [GitHub — kazuho/picojson](GitHub — kazuho/picojson
Рекомендации по выбору:
Для Arduino/ESP: ArduinoJson (идеальное сочетание удобства и ресурсов).
Для маломощных МК (ATtiny, AVR): JSMN (только парсинг) или cJSON.
Для STM32/ESP32 без Arduino: cJSON (C) или PicoJSON (C++).
Для сетевых проектов: Mongoose OS (если нужна интеграция с MQTT/HTTP).
Для мощных микроконтроллеров (ESP32, Teensy 4.x): nlohmann/json (если хватает оперативной памяти).
Все библиотеки, кроме nlohmann/json, подходят для устройств с оперативной памятью от 2 КБ. Для проектов с критичным потреблением памяти выбирайте JSMN или cJSON.
Какую погрешность и минимальный шаг перемещения экспериментально Вы получили?