Связь Arduino с Sim 900

Я использую arduino uno и sim-карту 900, sim-карта настроена и работает, так как я могу сделать ей телефонный звонок, и она звонит.

Sim-карта 900 питается через разъем питания, а uno в настоящее время питается через USB.

Я пытаюсь распечатать входящие текстовые сообщения, однако при открытом последовательном мониторе я вижу только "Инициализация...".

    #include <SoftwareSerial.h>

//Создание программного последовательного объекта для связи с SIM900
SoftwareSerial mySerial(7, 8); //SIM900 Tx & Rx is connected to Arduino #7 & #8

void setup()
{
  //Начать последовательную связь с Arduino и Arduino IDE (последовательный монитор)
  Serial.begin(9600);

  //Начнать последовательную связь с Arduino и SIM900
  mySerial.begin(9600);

  Serial.println("Инициализация..."); 
  delay(1000);

  mySerial.println("AT"); //Рукопожатие с SIM900
  updateSerial();

  mySerial.println("AT+CMGF=1"); // Настройка ТЕКСТОВОГО режима
  updateSerial();
  mySerial.println("AT+CNMI=1,2,0,0,0"); // DРешает, как должны обрабатываться вновь поступившие SMS-сообщения
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//Переадресация полученных последовательных сообщений на Последовательный порт программного обеспечения
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Переслать полученное программное обеспечение Serial в Последовательный порт
  }
}

Я ни за что на свете не могу понять, почему он больше ничего не печатает? Кто-нибудь может дать мне какие-нибудь указания или что проверить?

, 👍0

Обсуждение

Проверьте это https://arduinoprosto.ru/q/13683/19409, @sa_leinad

Я думаю, что вижу на щите перемычки, чтобы использовать его над программным обеспечением, даже если он находится на Uno, @Juraj


1 ответ


1

"Инициализирующая" распечатка происходит потому, что она отправляется непосредственно на аппаратный последовательный порт UNO. Остальное не происходит, потому что оно направляется на SIM-карту с помощью программных выводов 7 и 8, а SIM-карта, по-видимому, не отвечает.

Решите проблему пополам: соедините контакты 7 и 8 вместе и снова запустите программу. Если вы получаете "AT" и все остальное, то вы знаете, что порт "mySerial" активен и работает правильно, а проблема в "половине" SIM-карты. Может быть, у вас неправильное проводное соединение, или, может быть, серийная скорость SIM-карты по умолчанию не 9600, или что-то в этом роде. YMMV ;-).

В качестве теста я запустил вашу программу на UNO с перемычкой между контактами 7 и 8. К сожалению, это не сработало, но теперь я знал, что проблема не имела ничего общего с SIM-щитом. Результат оказался не таким, как я ожидал, но теперь мне пришлось "сократить проблему вдвое".

Теперь, когда я определил, что SIM-карта не является фактором (во всяком случае, пока), я мог сосредоточиться на "UNO half". После некоторых веб-исследований я обнаружил, что "Программный последовательный" не поддерживает "обратную связь" (зацикливание линии передачи обратно в линию приема), поскольку он не может одновременно передавать и принимать. К счастью, библиотека AltSoftSerial Пола Стоффрегена поддерживает одновременную передачу и прием, а также будет поддерживать обратную связь.

Итак, я установил библиотеку на Arduino setup, скомпилировал и загрузил пример, показанный ниже.

#include <AltSoftSerial.h>

// AltSoftSerial всегда использует эти контакты:
//
// Плата          Передача  Получение  ШИМ неиспользуется
// -----          --------  ---------  ------------------
// Teensy 3.0 & 3.1  21        20         22
// Teensy 2.0         9        10       (none)
// Teensy++ 2.0      25         4       26, 27
// Arduino Uno        9         8         10
// Arduino Leonardo   5        13       (none)
// Arduino Mega      46        48       44, 45
// Wiring-S           5         6          4
// Sanguino          13        14         12

AltSoftSerial altSerial;

void setup() {
    Serial.begin(9600);
    //while (!Serial); // подождите, пока откроется последовательный монитор Arduino
    Serial.println("Начинается тест AltSoftSerial");
    altSerial.begin(9600);
    altSerial.println("Hello World");
}

void loop() {
    char c;

    if (Serial.available()) {
        c = Serial.read();
        altSerial.print(c);
    }
    if (altSerial.available()) {
        c = altSerial.read();
        Serial.print(c);
    }
}

После загрузки кода я "зациклил" пин 9 обратно на пин 8 и обнаружил, что, когда я отправлял символы в UNO через аппаратный USB-порт, они снова "отражались" на последовательном выходе после прохождения порта 8/9 AltSoftSerial.

Так что на данный момент я решил "половину" проблемы; остальное зависит от вас! ;-)

,

или, может быть, они подключили программное обеспечение к контактам 6 и 7 на экране, а не к RX и TX, @Juraj

Или тысячи других возможностей. Я не знаком с SIM-щитом, поэтому мне трудно сказать...., @user3765883

тогда зачем вы написали ответ?, @Juraj

Спасибо за ваш ответ, я действительно столкнулся с тем, что software serial не полностью поддерживается, однако новичок в ардуино. Я перешел к использованию другого щита для своего проекта, но я попробую еще раз, используя ваш очень полезный ответ., @nathans

Рад помочь, и я надеюсь, что вы продолжите наслаждаться своими приключениями в Arduino-land. Если у вас есть время, пожалуйста, отметьте мой ответ как "Принято", так как (я думаю) это улучшит мою оценку "репутация" и позволит мне помочь другим., @user3765883