Датчик наклона с оповещением по gsm/gprs
- Войдите на сайт для отправки комментариев
Сб, 10/04/2021 - 12:34
Новичок - ищу подсказки
Нужно:
Датчик наклона с оповещением по gsm/gprs
Есть на руках:
1. attiny85 digispark
2. Arduino Nano
3. ESP8266
4. Модуль GSM/GPRS Goouuu Tech IOT-GA6-B
5. Модуль GY-521 с гироскопом, акселерометром и термометром MPU-6050
Вопросы:
Вот можно ли attiny85 digispark подружить с модулями ?
Или мне нужно хотя бы Arduino Nano ?
P/S - Если я правильно понимаю, то из за отсутствия у attiny85 digispark UART интерфейса не получится подружить GSM/GPRS модуль.
отсутсвие UART не так важно, важнее что на аттини маловато пинов для подключения той периферии, что вы себе запланировали. Если причина выбора дигиспарка в том, что нужно устройство малого размера, то лучше взять вместо нано отдеьный микроконтроллер и развести свою плату
отсутсвие UART не так важно, важнее что на аттини маловато пинов для подключения той периферии, что вы себе запланировали. Если причина выбора дигиспарка в том, что нужно устройство малого размера, то лучше взять вместо нано отдеьный микроконтроллер и развести свою плату
Как я понял...
на дигиспарке 5 пинов, шестой это Reset, с ним надо уметь работать.
Если Вы абсолютно уверены что, кроме двух указанных модулей, в проекте больше ничего не появится - то пинов вроде хватает.
Но, по-опыту - обычно по мере доводки схемы появляются новые задачи. Например, если это мобильное устройство - возможно вы захотите измерять напряжение на батарейке - это еще пин...
@b707
Понял, спасибо!
Буду пробовать / разбираться.
Выбрал пока для старта:
1. Arduino Nano
2. Модуль GSM/GPRS Goouuu Tech IOT-GA6-B
Почему не отправляется СМС ?
#include <SoftwareSerial.h> // NANO | GSM // 5V | VCC // GND | G #define D2 2 // D2 | UTX #define D3 3 // D3 | URX SoftwareSerial gsm(D2, D3); String number = "+79XXXXXXXX"; // Принимаемый номер телефона void setup() { Serial.begin(9600); Serial.println("Старт системы..."); gsm.begin(115200); delay(1000); sms(); // Отправка sms } void loop() {} //----------- GSM Функции ---------- void sms() { Serial.println ("Отправка смс"); gsm.println("AT+CMGF=1\r"); // Перевод модуля в режим работы с тектовыми сообщениями delay(1000); gsm.println("AT+CSCS=\"GSM\"\r"); // Включение GSM кодировки delay(1000); Serial.println ("Установка номера"); gsm.println("AT+CMGS=\"" + number + "\"\r"); // Отправка SMS delay(1000); String SMS = "SMS....."; gsm.println(SMS); delay(100); gsm.println((char)26); delay(1000); Serial.println ("Смс отправлено"); }Подключение: NANO по USB к компьютеру
NANO | GSM 5V -> VCC GND -> G D2 -> UTX D3 -> URX
А так же пробовал и отдельно питать модуль GSM/GPRS Goouuu Tech IOT-GA6-B
Блок питания OUTPUT 12V 2A -> DC–DC понижающего преобразователя D-SUN Входное напряжение: 7 - 28 В Выходное напряжение: 5 В Выходной ток: 0 - 3 A -> Модуль
В мониторе порта:
Но смс не приходит.
Почему не отправляется СМС ?
может потому что максимальная скорость Софтсериала - 38400 ?
может потому что максимальная скорость Софтсериала - 38400 ?
Ой, исправил на 9600
Вот только безрезультатно(
Но и вот тут у парня всё работает на 115200:
1. https://www.youtube.com/channel/UCYGK6xzxWoTKrpHLPDqs5Mg
2. https://github.com/arifroboshoptech/UNO-GSM-GA6-B/blob/main/GA6-B_GSM/GA...
Ой, исправил на 9600
Исправлять на не "на 9600", а на ту скорость, с которой работает Ваш модуль
Вот только безрезультатно
А чего Вы хотели? В правда думали, что других ляпов нет? Например, что вот здесь;
RX и TX не перепутаны?
Но и вот тут у парня всё работает на 115200
Вот ему и задавайте вопросы. Чего Вы сюда-то пришли?
RX и TX не перепутаны?
В описании правда напутал, подключено было правильно
Исправлять на не "на 9600", а на ту скорость, с которой работает Ваш модуль
А как определить правильную скорость ?
Сейчас стоит для Serial.begin(9600); и для gsm.begin(9600);
- Я пытался найти примеры где у людей всё работает и хотел повторить
А в итоге не выходит) и скорости не те
Я и эту темку пытался повторить, но мне и ответы на AT-команды никакие не приходят xD
http://arduino.ru/forum/apparatnye-voprosy/strannoe-povedenie-gsm-modulya-goouuu-tech-iot-ga6
Модуль GSM запитан отдельно 5V
А NANO по USB к компьютеру
#include <SoftwareSerial.h> // Подключение: // NANO | GSM // D2 -> URX // D3 -> UTX SoftwareSerial gsm(2, 3); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); Serial.println("Start!"); delay(2000); gsm.begin(9600); Serial.println("Отправка \"AT\""); gsm.println("AT"); delay(300); Serial.println("Отправка \"AT\""); gsm.println("AT"); delay(300); Serial.println("Отправка \"AT\""); gsm.println("AT"); delay(1500); Serial.println("Отправка \"AT+COPS?\""); gsm.println("AT+COPS?"); delay(1500); Serial.println("Отправка \"AT+CPAS\""); gsm.println("AT+CPAS"); delay(1500); Serial.println("Отправка \"AT+CREG?\""); gsm.println("AT+CREG?"); delay(1500); } void loop() { // run over and over if (gsm.available()) Serial.write(gsm.read()); if (Serial.available()) gsm.write(Serial.read()); }Я и эту темку пытался повторить, но мне и ответы на AT-команды никакие не приходят xD
#include <SoftwareSerial.h> // Подключение: // NANO | GSM // D2 -> URX // D3 -> UTX SoftwareSerial gsm(2, 3); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); Serial.println("Start!"); delay(2000); gsm.begin(9600); Serial.println("Отправка \"AT\""); gsm.println("AT"); delay(300); Serial.println("Отправка \"AT\""); gsm.println("AT"); delay(300); Serial.println("Отправка \"AT\""); gsm.println("AT"); delay(1500); Serial.println("Отправка \"AT+COPS?\""); gsm.println("AT+COPS?"); delay(1500); Serial.println("Отправка \"AT+CPAS\""); gsm.println("AT+CPAS"); delay(1500); Serial.println("Отправка \"AT+CREG?\""); gsm.println("AT+CREG?"); delay(1500); } void loop() { // run over and over if (gsm.available()) Serial.write(gsm.read()); if (Serial.available()) gsm.write(Serial.read()); }это вы от этого кода какие-то ответы ждете? - с чего бы?
Посмотрите внимательно - сначала вы долго долбите модем разными командами, не читая ответов. После последней команды ждете 1.5 секунды - и только потом начинаете слушать модем. А что там слушать к тому моменту? - если модем вам что и говорил. то уже давно закончил :)
выкиньте из этого кода все команды, оставьте только это:
#include <SoftwareSerial.h> SoftwareSerial gsm(2, 3); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); gsm.begin(9600); } void loop() { // run over and over if (gsm.available()) Serial.write(gsm.read()); if (Serial.available()) gsm.write(Serial.read()); }прошейте ардуину, подключите к компу, откройте в Ардуино "Монитор порта", настройте скорость на 9600 и попробуйте дать модему команды ыручную, начните хотя бы с "АТ" . Вот тогда и увидите, отвечает что-то модем или нет
прошейте ардуину, подключите к компу, откройте в Ардуино "Монитор порта", настройте скорость на 9600 и попробуйте дать модему команды ыручную, начните хотя бы с "АТ" . Вот тогда и увидите, отвечает что-то модем или нет
Пробую отправлять "AT" как с ковычками , так и без них, ничего не происходит.
- Позвонил на всякий на ту симку что там стоит, она "не в сети"
Постоянно горит красный и мигает зелёлный.
Пробую отправлять "AT" как с ковычками , так и без них, ничего не происходит.
отправлять AT без кавычек, латинскими заглавными буквами, в терминале перевод строки поставить NL & CR. Строку AT отправлять 10-15 раз подряд, иногда модем отвечает не сразу
если все равно нет ответа - то либо с проблемы с подключением, либо скорость не та, или модем совсем не стартует. Пока модем в терминале не ответит - пробовать какие-либо скетчи в ардуино абсолютно бессмысленно
отправлять AT без кавычек, латинскими буквами, в терминале перевод строки поставить NL & CR
Дополню: лучше заглавными буквами. А скорость можно подбирать, пробуя по очереди. Мне как-то модем с 19200 попался.
прошейте ардуину, подключите к компу, откройте в Ардуино "Монитор порта", настройте скорость на 9600 и попробуйте дать модему команды ыручную, начните хотя бы с "АТ" . Вот тогда и увидите, отвечает что-то модем или нет
Пробую отправлять "AT" как с ковычками , так и без них, ничего не происходит.
- Позвонил на всякий на ту симку что там стоит, она "не в сети"
Постоянно горит красный и мигает зелёлный.
наверное надо было начать с того как подключено питание на SIM?
как подключен UART?
А скорость можно подбирать, пробуя по очереди. Мне как-то модем с 19200 попался.
у ТС модем Goouuu Tech IOT-GA6-B - это китайский клон китайского же AThinker A6, у которого должна быть автонастройка скорости Сериал. Если его подолбить подольше разными командами - он должен начать отвечать на скорости входящих данных :)
Данный модуль должен сам регистрироваться в сети при подаче питания ?
- вставляю сим в телефон - в сети
- вставляю в модуль - не в сети
Подключение модуля пробую 2
1: От Nano
VCC модуля -> 5V nano
G модуля -> GND рядом с VIN nano
URX модуля -> D2 nano
UTX модуля -> D3 nano
2: Отдельно
Блок питания OUTPUT 12V 2A -> DC–DC понижающего преобразователя D-SUN Входное напряжение: 7 - 28 В Выходное напряжение: 5 В Выходной ток: 0 - 3 A -> Модуль
VCC модуля -> D-SUN +
G модуля -> D-SUN -
URX модуля -> D2 nano
UTX модуля -> D3 nano
Подключение модуля пробую 2
1: От Nano
VCC модуля -> 5V nano
G модуля -> GND рядом с VIN nano
URX модуля -> D2 nano
UTX модуля -> D3 nano
Нано подключите к компу по USB, никаких других блоков питания не нужно. Этот модем мало потребляет, ему питания от USB вполне достаточно
RX TX попробуйте и так, как нарисовано. и наоборот - иногда китайцы подписи путают
Кстати, СИМка какая? - должна быть обязательно 2G. А сейчас стали появлятся операторы, у которых 2G уже нет, например российский Теле2. Такая СИМка в этом модеме работать не будет
Кстати, СИМка какая? - должна быть обязательно 2G. А сейчас стали появлятся операторы, у которых 2G уже нет, например российский Теле2. Такая СИМка в этом модеме работать не будет
Мегафон - на симке надпись 4G+
Мегафон - на симке надпись 4G+
надпись ничего не значит. смотрите на сайте оператора, в каком типе сетей он работает в вашем регионе
еще в старых телефонах раньше было "инженерное меню", где можно было посмотреть диапазоны, поддерживаемые именно этой симкой. В новых не знаю, отстал от темы, может кто их железячников подскажет
Проще карту покрытия посмотреть.
Пробежался по скоростям
А так же пытался долбить командами
Ничего не помогает xD
Не одного "OK" на отправку "AT"
А такое разве может решить проблему ?
Перевод Google Translate
Сам топик тут https://forum.arduino.cc/index.php?topic=422375.0
- Именно это сообщение последнее в топике.
Судя по покрытию мой симки "Мегафон" - я есть и буду "не в сети" xD
P.S - Я новичок - не злитесь на тупость xD
А правильно ли я понимаю нижеследующее ?
Я не могу видеть ответы из за разности скоростей аппаратного Serial и софтового SoftwareSerial ?
- Т.е. допустим Arduino Nano и мой модуль общаются аппаратно на скорости 115200 и мне не удаётся подсмотреть что там происходит из за ограничений SoftwareSerial в 38400 и не возможности наладить модуль на подходящие для SoftwareSerial скорости.
Т.е. если я отправляю модулю команды на его скорости, то он их видит, а просто я не могу реакцию через монитор порта посмотреть - так получается ?
void setup() { Serial.begin(9600); gsm.begin(115200); delay(1000); gsm.println ("AT"); }Вы спросили какой-то бред.
Я не могу видеть ответы из за разности скоростей аппаратного Serial и софтового SoftwareSerial ?
Такая проблема есть. Ставьте одинаковые скорости. И ещё, по тем же причинам, что и у этой проблемы, старайтесь не пересекать по времени работу аппаратного и программного сериалов, чтобы они не работали одновременно.
Такая проблема есть. Ставьте одинаковые скорости. И ещё, по тем же причинам, что и у этой проблемы, старайтесь не пересекать по времени работу аппаратного и программного сериалов, чтобы они не работали одновременно.
Да что то на сотни ручных отправок команды "AT" в монитор - ноль ответов(
Видимо я для поиграться проблемный (со сложностями) модуль купил...
#include <SoftwareSerial.h> SoftwareSerial mySerial(2,3); // URX-D2 / UTX-D3 void setup() { Serial.begin(9600); mySerial.begin(9600); Serial.println("Отправка команды AT+IPR=9600"); mySerial.println("AT+IPR=9600"); delay(1500); Serial.println("Преднастройка готова"); } void loop() { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }Может какое то более хитрое подключение нужно ?
- У меня так
Так.... а земли ардуино и модуля кто обьединять будет?? Без этого точно ничего не заработает
И я же вам написал - не надо внешних БП, питайте модуль от пина 5в на Нано, а нану - от Usb
Ура! К 28-му посту Вы расщедрились на схему подключения, которая должна была бы быть ещё в самом первом!
Вот сколько раз зарекался требовать схему, скетч и фото сразу. Не хочет ТС рисовать и выкладывать - лесом! Но, каждый раз ... не зря говорят: "Зарекалась свинья дерьмо не есть, идёт, а оно лежит ..."
В общем с такой схемой работать не должно и не будет.
Во-первых, я Вам уже писал вчера (#9), что у Вас перепутаны TX и RX, Вы мне солгали, что на самом деле всё правильно (#10).
Во вторых, земли ардуины и модуля должны быть соединены.
Ура!
Во-первых, я Вам уже писал вчера (#9), что у Вас перепутаны TX и RX, Вы мне солгали, что на самом деле всё правильно (#10).
Прошу прощения!
- Видимо я запутался совсем.
Как правильно должно быть ?
У меня URX к D2 | UTX к D3
А должно быть URX к D3 | UTX к D2 ?
И так и так пробовал, но много где вычитал что нужно отдельное питание.
- Сделал по вашему.
Вот так:

И так и так пробовал, но много где вычитал что нужно отдельное питание.
В отдельном питании нет ничего плохого, но линии GND обязаны быть объединены!
- Это комментарий к фото
Модуль | Nano
И скетч:
#include <SoftwareSerial.h> SoftwareSerial mySerial(2,3); // URX-D2 / UTX-D3 void setup() { Serial.begin(9600); mySerial.begin(9600); Serial.println("Отправка команды AT+IPR=9600"); mySerial.println("AT+IPR=9600"); delay(1500); Serial.println("Преднастройка готова"); } void loop() { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }Как правильно должно быть ?
У меня URX к D2 | UTX к D3
А должно быть URX к D3 | UTX к D2 ?
Вот таким походом Вы выносите себе мозг и сами себя путаете.
Запомните навсегда: RX одного устройства к TX другого и только так. Tx - это пин на который передаём, а RX - пин с которого читаем. Так вот Вы всегда должны соединять передатчик одного устройства с приёмником другого. А Вы соединили передатчик с передатчиком и приёмник с приёмником. Много они у Вас наобщаются?
В параметрах конструктора SoftSerial первым идёт RX, вторым TX. Поэтому, если Вы не пошутили опять, и у Вас в коде действительно написано:
значит у Вас RX - 2, a TX - 3. Вот и получается, что Вы соединили два RX и два TX между собой
Я сдаюсь. Горбатого могила исправит :-(
Я сдаюсь. Горбатого могила исправит :-(
Просто выше обновил, чтобы прослеживались ошибки.
Я понял что RX -> TX и TX -> RX должны быть соединены.
А так же, что идёт такая очерёдность в SoftwareSerial mySerial (rxPin, txPin);
Но в моей голове сложность возникает из за того что я к D2 и D3 подключаюсь, а не к RX и TX.
А еще я вам три дня назад писал - просто попробуйте поменять местами rx tx
Я тоже вечно их путаю - и когда сомневаюсь и ничего не работает, частенько просто меняю наоборот. Этим ничего сломать нельзя
Я игрался с ними - максимальный эффект был
- Была куча бесконечных "?"
Сейчас выполнил все рекомендации
Вот такой скетч - 0 эмоций в мониторе порта на отправки "AT"
#include <SoftwareSerial.h> // Модуль VCC (красный) Nano 5V // Модуль G (черный) Nano GND // Модуль URX (белый) Nano D2 // Модуль UTX (коричневый) Nano D3 SoftwareSerial mySerial (3, 2); void setup() { Serial.begin(9600); mySerial.begin(9600); Serial.println("Отправка команды AT+IPR=9600"); mySerial.println("AT+IPR=9600"); delay(1500); Serial.println("Преднастройка готова"); } void loop() { if (mySerial.available()) Serial.write(mySerial.read()); if (Serial.available()) mySerial.write(Serial.read()); }Я игрался с ними - максимальный эффект был
- Была куча бесконечных???
Вооот!!! Вот именно то соединение, где были вопросы - вам и надо повторить.
Но вообще я уже не верю, что у вас хоть что-то выйдет, ардуино и электроника вообще - явно не ваше, 4 провода неделю подсоенить не можете.
Смешно, а ведь вы планировали это на дигиспарке делать...
Я игрался с ними - максимальный эффект был
- Была куча бесконечных???
Я просто чутка вскипел из за количества переработанной информации вот и начал путаться на 2+2)
- Всё заработает, я уверен. - С вашими подсказками конечно xD
Подумал что куча "???" - это был какой то мусор) и сигнал о том, что то не так xD
Уфффф)
Вы сказали повторить, я повторил)
- И всё заработало.
На питании от Arduino Nano - вообще 0 эмоций.
Но так как я не знал про общий минус, куча ???? у меня появлялось на отдельном питании модуля.
А подключив сейчас общий минус и отдельное питание - получаю вот что xD
Урррряяяяя
Но в моей голове сложность возникает из за того что я к D2 и D3 подключаюсь, а не к RX и TX.
Так я же Вам писал, что
Вот таким походом Вы выносите себе мозг и сами себя путаете.
помните? Думаете я это для красного словца?
Вот, скажите, кто или что мешает Вашей голове НИКОГДА не писать вот так:
А ВСЕГДА писать вот так:
Самому же насколько легче жить станет! Вы теперь, глядя на строки 1-2 сразу видите где у Вас что и понимаете как это надо соединять.
С Победой!
Модуль видимо через какое то время после запуска засыпает), не реагирует на команды, а как его будить ?
Какой то специальной AT командой ? Или нужно тащить ещё куда то провод на вкл / выкл ?
Засыпает? Изучайте как его из сна выводить - https://voltiq.ru/datasheets/A6_gprs_series_module_at_instruction_set_v1.0.pdf
Евгений Петрович, а не лучше писать так?
Это я под впечатлением, что define устарел. )
Лучше. Сам я так и пишу. Только я бы туда ещё static добавил.
Сочетание static constexpt это что-то новое для меня.