Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
У меня есть сложное требование, в котором используется ряд библиотек, зависящих от времени, например OneWire. При использовании официального шилда GSM на mega он загружает версию последовательного программного обеспечения для связи с GSM. Я хочу, чтобы он использовал запасной аппаратный последовательный порт на MEGA для большей стабильности синхронизации. Как мне изменить библиотеку GSM, чтобы (необязательно) автоматически обнаруживать MEGA, а затем использовать назначенный последовательный порт. Я с радостью перекину правильные контакты аппаратного порта mega serial на изогнутые наружу контакты 2 и 3 экрана GSM (контакт 2 уже согнут, если вы все равно используете MEGA).
@ShanevanJ, 👍1
Обсуждение1 ответ
Прежде чем мы начнем, обратите внимание, что распиновка экрана GSM может быть неправильной для использования аппаратного последовательного порта на Mega. Остерегайтесь какой-нибудь неприятной проводки.
Покопавшись в Github, я нашел это каталог библиотеки GSM. Леди и джентльмены, пришло время сломать что-то важное, запачкав руки! Сдвиньте стулья ближе, чтобы услышать историю о прикосновении к коду, который не следует трогать!
Нажмите на папку src
, чтобы открыть ее. Когда я впервые открыл это, я был несколько напуган количеством файлов. Однако у меня был план:
- Найдите имя экземпляра SoftwareSerial. Я предполагаю, что они будут использовать только один объект для предотвращения избыточности. Кроме того, я предполагаю, что большинство последовательных данных обрабатывается через один файл, но мне нужно это подтвердить.
- Удалить экземпляры объекта SoftwareSerial.
- Устраните все оставшиеся проблемы с "портом"
Покопавшись еще немного, я заметил, что библиотека на самом деле использует уникальную версию библиотеки SoftwareSerial, поэтому сделать это будет еще сложнее. Ура нам! С другой стороны, мы точно знаем, какой код заменить. Пристегните ремни безопасности, сейчас будет довольно неприятно.
Хорошо, вернемся назад и выясним, что мы хотим изменить. Прежде всего, это ужасная идея изменять библиотеки непосредственно в каталоге, который использует Arduino IDE.
Итак, если бы вы сделали копию из папки src
для библиотеки GSM в папку «libraries» Arduino, этого было бы недостаточно. Среда разработки Arduino запуталась бы, если бы нужно было использовать два идентичных файла заголовков. Вам нужно будет переименовать основной заголовочный файл и использовать только его для включения в свои проекты. Кроме того, большинство файлов в библиотеке, вероятно, ссылаются на этот файл, поэтому не забудьте переименовать все ссылки в библиотеке на этот файл. Быстрый CTRL + SHIFT + F в текстовом редакторе Atom будет выполнять поиск по всему проекту, над которым я работаю. Я не совсем уверен, что имя папки испортит Arduino IDE, но было бы неплохо переименовать папку так, как называется ваша библиотека, по крайней мере, для удобства чтения.
Прежде чем мы продолжим, давайте удостоверимся, что библиотека по-прежнему компилируется, и нам не нужно возиться с кодом. Импортируйте новую библиотеку в базовый пример скетча GSM и посмотрите, нормально ли она компилируется и работает.
Он компилируется? Большой. Продолжаем!
Последовательный порт представляет собой файл GSM3SoftSerial.cpp
. Без фактического переноса я не могу дать вам тонну советов. Просмотрите и посмотрите, когда переменные создаются, используются и изменяются. Если вы не уверены, я иногда бываю в чате: не стесняйтесь задавать там мелкие вопросы и пинговать меня с @AnnonomusPenguin или оставить комментарий к этому сообщению.
Я бы также посоветовал оставить там все, в чем вы не уверены, убедиться, что он работает с аппаратным серийным номером, и построчно начать удалять эту переменную и посмотреть, не сломается ли что-нибудь. Для этого также было бы неплохо использовать такой инструмент, как Git/Github (или другое программное обеспечение для контроля версий), чтобы помочь вам отменить изменения, которые что-то сломали, или посмотреть, что вы изменили в целом.
Итак, после замены кода внутри функций (finalWrite, ISR и begin/clear кажутся теми, которые вы должны изменить), скомпилируйте код и посмотрите, работает ли он!
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Arduino Mega Loopback Test с несколькими портами TX/RX
- Как разделить входящую строку?
- Как сбросить или отформатировать Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Какова максимальная длина провода для последовательной связи между двумя Arduino?
- Последовательная связь между двумя Arduino (запрос и получение)
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
#если определено (__AVR_ATmega1280__) || определено (__AVR_ATmega2560__) ........
, @jippieСпасибо, это сработает, но мне нужна помощь, чтобы изменить библиотеки с использования настроенного программного серийного кода и позволить мне выбрать аппаратный последовательный контакт ... это реальная проблема., @ShanevanJ
[AltSoftSerial](https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html) может помочь вам в этом случае..., @Anonymous Penguin
Вам абсолютно необходимо использовать serial0?, @TheDoctor
Я не думаю, что AltSoftSerial поможет, поскольку цель, по-видимому, состоит в том, чтобы использовать один из дополнительных доступных **аппаратных** последовательных портов. Предположительно, пройдя через библиотеку и изменив мягкие серийные ссылки на альтернативный аппаратный последовательный объект, это сделает (или поместив выбор внутри ifdef, как предложил jippie)., @Chris Stratton
У кого-нибудь получилось это сделать?, @pintelo