Как загрузить и сохранить настройки/переменные с компьютера на Arduino?
В данный момент я буквально настолько зеленый нуб, насколько это возможно. Я просмотрел массу видеороликов, пока планирую свой проект, но не нашел ничего о том, как настройки загружаются из внешнего источника и затем сохраняются на Arduino.
Я хочу создать плату с несколькими кнопками. Я хочу, чтобы эти кнопки затем передавали MIDI PC/CC на основе настраиваемых настроек, загруженных через компьютер. Итак, я создам приложение, которое сможет «создавать» настройки (json?) для каждой кнопки. В идеале я бы просто подключил плату, создал настройки и потом загрузил их в устройство.
Я читал о хранении подобных вещей в EEPROM, но срок их службы ограничен (что меня пугает). Итак, нужно ли мне хранить эти переменные в EEPROM или просто скомпилировать и загрузить приложение с новыми значениями переменных?
Я просто ищу возможное направление и ссылки для исследования.
Заранее спасибо.
@TSNev, 👍-1
Обсуждение1 ответ
Лучший ответ:
Ваш вопрос довольно широк, поэтому я дам вам несколько указаний по его различным частям.
Связь с ПК для получения настроек: Для Arduino Uno вам в основном остается последовательный интерфейс (UART) для связи с ПК. Для проводной связи вы можете просто использовать порт USB. На вашем ПК вам понадобится программа для отправки настроек через последовательный порт на Arduino. Вы можете использовать любую программу последовательного терминала или написать свою собственную. Это зависит от ваших потребностей. На Arduino вам понадобится код для анализа последовательной связи и получения настроек. Кажется, что ваши числа могут быть довольно сложными (а не просто числами одного типа). Поэтому вам следует реализовать базовый протокол сообщений. Обычно в качестве разделителя в конце сообщения используется символ новой строки (
\n
). В вашем коде вы считываете последовательные данные в буфер до тех пор, пока не прочтете символ новой строки. Затем вы начинаете обрабатывать сообщение в целом. Вы можете увидеть реализацию этого протокола в примереSerialEvent
, который поставляется с Arduino IDE. Затем вы можете использовать JSON в качестве текстового формата данных для передачи их в Arduino. Там вы можете использовать библиотеку Arduino JSON для декодирования данных и получения настроек. Если вы не хотите использовать JSON, вы также можете использовать более простой протокол.Сохранение полученных настроек: без какого-либо дополнительного оборудования можно использовать EEPROM. «Продолжительность жизни», о которой вы упоминаете, представляет собой возможное количество циклов записи, пока ячейка не перестанет гарантированно работать правильно. Циклы чтения здесь не приносят никакого вреда. Atmel дает цифру в 100 000 циклов записи, но обратите внимание, что это минимальное гарантированное число. (Для получения дополнительной информации прочтите этот вопрос) Вы действительно так часто меняете настройки? Проведите небольшой расчет следующим образом: представьте, что вы хотите менять настройки 10 раз в день каждый день в году. Даже в этом случае вы получите около 27 лет циклов записи EEPROM, что достаточно для выхода из строя других компонентов. Но если вы действительно хотите здесь обезопасить себя, вы можете использовать выравнивание износа. С помощью этого метода вы перемещаетесь по различным ячейкам EEPROM, чтобы сохранить настройки. Вы используете больше места в EEPROM, но каждая отдельная ячейка получит лишь часть нагрузки при записи. Для этого даже есть готовые библиотеки. Быстрый поиск в Google дал мне библиотеку EEPROMWearLevel, хотя сам я ею не пользовался. В зависимости от общего размера ваших настроек, вы можете увеличить продолжительность жизни в несколько раз. Если вы все еще не хотите использовать EEPROM, вы можете сделать то, что написал jsotola в своем комментарии: вы можете использовать модуль SD-карты для Arduino и подходящую SD-карту и сохранить там данные. Это приведет к увеличению затрат на программирование, особенно если вы хотите использовать файловую систему для чтения и записи SD-карты на ПК. (Примечание. Чипы памяти на SD-картах имеют ту же проблему с ограниченными циклами записи, поэтому функция выравнивания износа встроена в аппаратное обеспечение карты)
Вы также можете решить, что вам не нужно, чтобы настройки сохранялись между сбросами. Дальше можно просто использовать переменные и заполнить их настройками из кода последовательного интерфейса.
Вы сами должны решить, как лучше поступить.
Спасибо, что нашли время ответить на мои вопросы. Я ценю это., @TSNev
Если вы считаете мой ответ правильным/подходящим, примите его как правильный :), @chrisl
Думаю пойти по пути сохранения в EEPROM. Тут ничего не происходит..., @TSNev
- Arduino EEPROM сохраняет старые данные после прошивки новой программой
- Как увеличить срок службы EEPROM?
- Использование EEPROM в цикле ()
- Запустить код один раз после программирования
- Сохранение EEPROM после программирования на Arduino uno
- Не получается читать из / писать в EEPROM
- Сохранить данные перед выключением
- MIDI клавиатура управляемая светодиодная лента
интересный проект.... возможно можно сохранить настройки в файле на сд карте, @jsotola
На вопрос «_или мне просто скомпилировать и загрузить приложение_»: это будет хранить настройки вместе с приложением во флэш-памяти, срок службы которой короче, чем у EEPROM., @Edgar Bonet
ух ты!? отрицательный голос за желание получить руководство?, @TSNev
https://arduino.stackexchange.com/tour, @Juraj