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
Я не могу найти ссылку на техническое описание этого конкретного модуля, поэтому постараюсь добавить изображение модуля
@Henry, 👍0
Обсуждение1 ответ
Лучший ответ:
После многих проб я нашел решение своей проблемы, спасибо @Majenko за упоминание перемычек.
Я все еще устанавливаю модуль SIM900 поверх Arduino.
Переключение перемычек с D1
и D0
на D8
и D7
решило проблему (см. зеленый квадрат на фото)
Я не знаю, почему он должен быть на D8
и D7
, так как на плате написано TX=0 и RX=1 и наоборот для Arduino
Затем использовал приведенный ниже скетч из этого руководства > 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
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как проверить, работает ли GSM-модуль?
- Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?
- Клиент MQTT на Arduino + SIM900
Можете ли вы предоставить ссылку на фактический модуль, который вы используете? Есть ли на нем перемычки для изменения назначения контактов TX и RX?, @Majenko
Привет @Majenko, пожалуйста, ознакомьтесь с правкой внизу моего вопроса. Спасибо, @Henry