Arduino Uno R3 не может обнаружить GPRS Shield SIM900

Я новичок в Arduino, который я получил только на этой неделе для своего проекта, который отправляет смс из моего приложения Windows.

У меня Arduino Uno R3 и GPRS Shield (Simcom) Sim900 (S2-1040S-Z0912)

Сейчас я следую этому руководству > https://educ8s.tv/arduino-gsm-shield/

На данный момент у меня проблема с подключением Sim900 к Arduino (думаю, Arduino не может обнаружить Sim900). Arduino работает правильно, так как мой компьютер обнаружил это. Также я подтверждаю, что SIM900 работает правильно, так как я могу позвонить симу внутри, и он звонит (также светодиод на устройстве мигает почти каждые 3 секунды или около того)

Я нашел это, но я планирую использовать только питание от USB, так как мне нужна только функция SMS, поэтому я ставлю SIM900 поверх Arduino. Как связать плату Arduino с SIM900?

Я использую эту библиотеку http://www.tinyosshop.com/datasheet/GSM_GPRS_GPS_Shield_GSMSHIELD.rar

и ниже скетч:

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];

char sms_position;
char phone_number[20];
char sms_text[100];
int i;

void setup()
{
    Serial.begin(9600);
    
    if (gsm.begin(9600)) 
    {
        Serial.println("\nstatus=READY");
        started=true;
    } 
    else 
        Serial.println("\nstatus=IDLE");

    if(started) 
    {
        if (sms.SendSMS("214", "?15001"))
        {
          Serial.println("\nSMS sent OK.");
        }
        else
        {
          Serial.println("\nError sending SMS.");
        }      
    }
};

void loop()
{
    if(started) 
    {
        sms_position=sms.IsSMSPresent(SMS_UNREAD);
        if (sms_position) 
        {
            Serial.print("SMS postion:");
            Serial.println(sms_position,DEC);
            sms.GetSMS(sms_position, phone_number, sms_text, 100);
            Serial.println(phone_number);
            Serial.println(sms_text);
        }      
        delay(2000);
    }
};

а вот и результат

Trying to force the baud-rate to 9600

1200
2400
4800
9600
19200
38400
57600
115200
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp

status=IDLE

Что я уже пробовал:

Я попробовал скетч с SoftwareSerial mySerial(7, 8); и SoftwareSerial mySerial(9, 10), которые я нашел в других руководствах, но они не работали.

Я попытался изменить GSM.cpp и изменить значения _GSM_TXPIN_ и _GSM_RXPIN_ на 7, 8 и 9, 10, но не работа.

Обнаружил, что контакт на моем Arduino — это RX = 0 и TX = 1, а SIM900 — это TX = 0 и RX = 1, попробовал код SoftwareSerial выше, но с 0, 1 и GSM.cpp с 0, 1, но все же не работает.

В настоящее время я пробую все остальные скетчи, которые нахожу в Интернете, но ничего не получается.

ИЗМЕНИТЬ: Это ссылка на модуль, который я купил https://www.lazada.com.ph/products/ sim900-gsm-shield-i267689740-s379728457.html?mp=1

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

SIM900 снизу

SIM900 Top

, 👍0

Обсуждение

Можете ли вы предоставить ссылку на фактический модуль, который вы используете? Есть ли на нем перемычки для изменения назначения контактов TX и RX?, @Majenko

Привет @Majenko, пожалуйста, ознакомьтесь с правкой внизу моего вопроса. Спасибо, @Henry


1 ответ


Лучший ответ:

0

После многих проб я нашел решение своей проблемы, спасибо @Majenko за упоминание перемычек.

Я все еще устанавливаю модуль SIM900 поверх Arduino.

Переключение перемычек с D1 и D0 на D8 и D7 решило проблему (см. зеленый квадрат на фото)

Я не знаю, почему он должен быть на D8 и D7, так как на плате написано TX=0 и RX=1 и наоборот для Arduino

JUMPERS

Затем использовал приведенный ниже скетч из этого руководства > https://lastminuteengineers.com/sim900-gsm-shield-arduino-tutorial/

#include <SoftwareSerial.h>

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

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

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //Подтверждение связи с SIM900
  updateSerial();
  mySerial.println("AT+CSQ"); //Тест качества сигнала, диапазон значений 0-31, 31 — лучший
  updateSerial();
  mySerial.println("AT+CCID"); //Прочитайте информацию о SIM-карте, чтобы убедиться, что SIM-карта подключена
  updateSerial();
  mySerial.println("AT+CREG?"); //Проверяем, зарегистрировался ли он в сети
  updateSerial();
}

void loop()
{
  updateSerial();
}

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

При этом он отображает правильный вывод на последовательном мониторе на основе руководства, и я могу подтвердить, что он также работает в моем приложении Windows Form, поскольку он может отправлять смс из приложения.

,

0 и 1 — аппаратные последовательные контакты. Если вы используете Serial в другом месте своего кода, вы не можете использовать 0 и 1 для щита. Они уже используются аппаратным серийным номером. Вы создаете software serial. Это не настоящий последовательный порт. Это программное обеспечение, притворяющееся последовательным портом. Это не будет использовать аппаратные последовательные контакты., @Delta_G

Если вы хотите использовать 0 и 1, тогда избавьтесь от всего последовательного программного обеспечения и просто используйте Serial для связи со щитом. Но это означает, что вы не можете использовать его для других целей, а также возникают сложности, когда вы хотите загрузить новый код., @Delta_G