Чтение SMS с помощью Arduino Uno и SIM800L и печать на LCD (16x2 буквенно-цифровых) с использованием последовательного соединения

Ну, я делаю устройство, которое должно получать SMS и печатать текст, используя ЖК-дисплей. Теперь у меня есть код, который может получать SMS и сохранять его в строковой переменной, используя последовательное соединение. Вот мой код:

#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;  //ЖК-контакты
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);                 
String Arsp, Grsp;
SoftwareSerial gsm(6,7); // RX, TX

void setup() {
  Serial.begin(9600);
  Serial.println("Testing GSM SIM800L");
  gsm.begin(9600);
  gsm.println("AT"); //проверка
  delay(1000);
  gsm.println("AT+CMGF=1");  //Установить текстовый режим
  delay(1000);
  gsm.println("AT+CNMI=1, 2, 0, 0, 0"); //Установить уведомление о новом сообщении, Индикация нового сообщения
  lcd.begin(16, 2);
}

void loop() {
  if(gsm.available()) {
    //Проверьте, отправляет ли GSM какие-либо данные
    Grsp = gsm.readString(); //Чтение данных, полученных от GSM-модуля SIM800L
    lcd.clear(); //Очистить ЖК-экран
    lcd.setCursor(0,0); //Установить курсор ЖК-дисплея на первую строку, первый ряд
    for(int i = 0; i<=100; i++) {
      // Распечатать полученную строку символ за символом
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(Grsp); //Печать строки, полученной от GSM (sms, отправитель, индекс sms, время получения и т. д.)
        lcd.print("        ");
        lcd.print(i); // Распечатать индекс строки
        delay(500);
    }
  }
}

Когда мой Arduino Uno подключен к ПК и последовательный монитор Arduino уже открыт, он правильно печатает этот текст, полученный от GSM

"  +CMT: "+995599093230","","18/01/05,16:29:57+16"  0.

В этом случае я отправил сообщение с текстом «0». Когда я отключаю USB и подключаю свой Arduino Uno к источнику питания 9 В и отправляю тот же текст сообщения, он печатает:

" +CMTI: "ME", "+995598403536", 40)

В этом случае 40 — это индекс полученного сообщения. Я хочу получить всю строку, как в первом случае, когда USB был подключен.

Я использую Arduino GND и 5V для питания SIM800L. Что я делаю неправильно? Это из-за неправильного последовательного соединения или ошибки неверного кода?

, 👍0

Обсуждение

Какое у вас напряжение питания 9 В?, @Majenko

Что-то вроде этой 9-вольтовой ячейки https://www.google.com/search?client=firefox-b-ab&biw=1600&bih=777&tbm=isch&sa=1&ei=3bFPWvylDY3zsAG_h6uwBw&q=9V+cell&oq=9V+c ell&gs_l=psy-ab.3...5364.6839.0.6980.0.0.0.0.0.0.0.0..0.0....0...1c..64.psy-ab..0.0.0....0.5s6BwlO-sC8#imgrc=0YK2n3P6ubCsVM:, @AlexL

О, боже. Ну, тогда вперед. Купи настоящую батарею или сетевой блок питания., @Majenko

Но в течение нескольких минут он работает хорошо. Реально ли получить эту проблему, используя этот телефон?, @AlexL

Да. Эти батареи почти бесполезны., @Majenko

И как вы мне объясните :), @AlexL

Я не знаю, как тебя можно объяснить. Ты необъясним., @Majenko

Похоже, вы не совсем понимаете :D, и будьте осторожны, когда оставляете комментарии, и смотрите на экран каждую секунду ;)., @AlexL

Аккумуляторы PP3 имеют емкость около 154 мАч. Типичная ячейка AA имеет емкость около 1500–2000 мАч. Просто для сравнения. Добавьте к этому тот факт, что вы теряете около половины своей мощности с помощью встроенного регулятора 5 В..., @Majenko

Также задали вопрос на: http://forum.arduino.cc/index.php?topic=520835 Если вы собираетесь это сделать, то, пожалуйста, будьте достаточно внимательны и добавьте ссылки на другие места, где вы делаете перекрестные публикации. Это позволит нам избежать траты времени из-за дублирования усилий, а также поможет другим, у кого есть те же вопросы и кто найдет ваш пост, найти всю необходимую информацию., @per1234


1 ответ


1

Батарея PP3, которую вы пытаетесь использовать, далеко не достаточно мощная, чтобы запустить SIM800L. Она едва ли достаточно мощная, чтобы запустить Arduino в течение более чем пары часов, если вам повезет.

SIM800L, как говорится в техническом описании, должен питаться от источника, способного обеспечить не менее 2 А.

Диапазон напряжения питания SIM800L составляет от 3,4 В до 4,4 В. Рекомендуемое напряжение — 4,0 В. Передаваемый импульс вызовет падение напряжения, и блок питания должен быть в состоянии обеспечить достаточный ток до 2 А.

Встроенный 5-вольтовый регулятор Arduino не может обеспечить более 800 мА, если вам повезет (и гораздо меньше, если входящее напряжение больше 7 В из-за рассеивания тепла). Работа от USB может допускать пики до 2 А на разъеме DCP USB без перегорания предохранителя PTC Arduino.

Типичная батарея PP3 имеет сопротивление 1,7 Ом. Это означает, что короткое замыкание на клеммах теоретически позволит максимальному току 9/1,7 = 5,2 А. Такой ток рассеет около 46 Вт тепла внутри батареи, что приведет к ее взрыву. Кроме того, при таком токе, учитывая типичную низкую емкость около 154 мАч, батарея разрядится примерно за 100 секунд.

Максимальный номинальный ток для одной из этих батарей (по крайней мере, максимальный ток, указанный на любом из графиков в техническом описании) составляет 250 мА.

Вам необходимо запитать SIM800L совершенно другим способом, включая две важные вещи:

  1. Вам нужен источник питания, который может обеспечить 2 А при номинальном входном напряжении вашего модуля (5 В?)
  2. Этот источник должен быть либо отделен от Arduino (за исключением земли, которая должна быть подключена как к Arduino, так и к модулю), либо, если он составляет 5 В, его можно использовать для непосредственного питания Arduino через контакт 5 В.
,