sim900 работает ли?

stasych
Offline
Зарегистрирован: 16.03.2016

Получил шилд sim900. Подключаю к Мини Про. Питание от отдельного БП.

код стандартный.

#include <SoftwareSerial.h> 
SoftwareSerial mySerial(7, 8);

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
Serial.println("arduino start 1");
}

void loop() {
  if (Serial.available()) mySerial.write(Serial.read());
  if(mySerial.available()) Serial.write(mySerial.read());
  
  }

При вводе любой АТ команды шилд ее же и выводит в окно монитора. Зеркально. Подключение проверил. Если поменять местами  пины 7 и 8 то не реагирует.

Есть у меня еще маленький шилд на sim800. Подключаю его - реакция на команды нормальная.

Может кто подскажет где косяк?

Olvin
Offline
Зарегистрирован: 01.08.2018

stasych пишет:

Получил шилд sim900. Подключаю к Мини Про. Питание от отдельного БП.

код стандартный.

#include <SoftwareSerial.h> 
SoftwareSerial mySerial(7, 8);

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
Serial.println("arduino start 1");
}

void loop() {
  if (Serial.available()) mySerial.write(Serial.read());
  if(mySerial.available()) Serial.write(mySerial.read());
  
  }

При вводе любой АТ команды шилд ее же и выводит в окно монитора. Зеркально. Подключение проверил. Если поменять местами  пины 7 и 8 то не реагирует.

Есть у меня еще маленький шилд на sim800. Подключаю его - реакция на команды нормальная.

Может кто подскажет где косяк?

Зеркально - это как? Вы ввели "AT", вам пришёл ответ "TA"?

Если вы имели в виду, что модуль присылает вам обратно то, что вы послали ему, то... Отключите эхо: "ATE0".

stasych
Offline
Зарегистрирован: 16.03.2016

Ну не так зеркально. Я ввожу АТ - мне приходит ответ АТ. И так любую команду. 

Ввел "АТЕ0" - пришел ответ "АТЕ0" !

Подключил шилд напрямую к СОМ порту компа. Через путти на скорости только 9600 шилд реагирует на команды нормально.

Мне кажется, что имеет место быть некорректная библиотека SoftwareSerial. Подскажите где скачать заведомо рабочую библиотеку. 

 

Olvin
Offline
Зарегистрирован: 01.08.2018

stasych пишет:

Ну не так зеркально. Я ввожу АТ - мне приходит ответ АТ. И так любую команду. 

Ввел "АТЕ0" - пришел ответ "АТЕ0" !

Так и должно быть. А вот после того, как придёт "OK" эхо должно пропасть.

> Подключил шилд напрямую к СОМ порту компа. Через путти на скорости только

> 9600 шилд реагирует на команды нормально.

>

> Мне кажется, что имеет место быть некорректная библиотека SoftwareSerial.

> Подскажите где скачать заведомо рабочую библиотеку. 

Хм... всё думаю-гадаю, а для чего такие сложности с вклиниванием? Почему не сразу напрямую подключаетесь? Догадываюсь, что это только кусочек кода, и вы что-то отлаживаете, но всё же?

stasych
Offline
Зарегистрирован: 16.03.2016

На даче у меня собран "умный дом". На меге2560 и сим800. Кое какие моменты работы с гпрс шилдом нужно отладить. Для этого на работе хочу собрать стэнд на мини про и сим 900 (лучше бы конечно мега2560, но она задерживается с прибытием из китая). Вот и мучаюсь ..

Olvin
Offline
Зарегистрирован: 01.08.2018

Может пригодится. Написал тут монитор последовательного соединения между двумя устройствами. Работает только на устройствах, где есть хотя бы два аппаратных UART (Mega2560 или Leonardo, например). Выводит данные на Serial.

// This code is only for Mega2560 and Leonardo:
// the boards which have at least two hardware UART ports.

#if !defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__)

#include <SoftwareSerial.h>

#define SERIAL2_RX_PIN 10
#define SERIAL2_TX_PIN 11

SoftwareSerial Serial2(SERIAL2_RX_PIN, SERIAL2_TX_PIN);

#endif // end of Arduino Mega detection

#define SERIAL_A Serial1
#define SERIAL_B Serial2
#define SERIAL_MONITOR Serial

#define SERIAL_X_RATE 9600

// Must be no less than SERIAL_X_RATE,
// and actually should be greater.
#define SERIAL_MONITOR_RATE 115200

#define START_DELAY 2000 // 2 seconds

void setup() {
  char c;

  SERIAL_A.begin(SERIAL_X_RATE);
  SERIAL_B.begin(SERIAL_X_RATE);
  SERIAL_MONITOR.begin(SERIAL_MONITOR_RATE);

  delay(START_DELAY);

  SERIAL_MONITOR.println("start monitoring");
  for (;;) {
    if (SERIAL_A.available()) {
      c = SERIAL_A.read();
      SERIAL_B.write(c);
      SERIAL_MONITOR.write(c);
    }
    if (SERIAL_B.available()) {
      c = SERIAL_B.read();
      SERIAL_A.write(c);
      SERIAL_MONITOR.write(c);
    }
  }
}

void loop() {}

Сам сейчас занимаюсь отладкой SIM5360E, c SIM800L намучался уже, не везёт мне с ними как-то...

stasych
Offline
Зарегистрирован: 16.03.2016

Вот в том то и дело, что на аппаратных UARTах проблем нет. А я пытаюсь подключиться через программный UART. 

После долгих тыканий получается что-то непонятное. При подключении шилда СИМ900 без ардуины, напрямую к порту шилд адекватно работает только на той скорости, которая проставлена в свойствах порта в диспетчере устройств. 

А вот при подключении через ардуину все как то странно. Раньше было как я писал выше - тупо эхо, которое никакой командой не отключается. А теперь в скетче я прописываю 9600 а мониторе порта мне приходится прописать 115200, чтобы что-то увидеть (не квадратики).  "arduino start 1" вижу а вот на команды никакой реакции нет.

С каждым разом все интереснее и интереснее. В инете везде написано как подключить шилд к ардуино уно. Как кто подключал к минику я нигде не нашел. Может в этом случае есть какой-то подводный камень?

stasych
Offline
Зарегистрирован: 16.03.2016

Olvin пишет:

Может пригодится. Написал тут монитор последовательного соединения между двумя устройствами. Работает только на устройствах, где есть хотя бы два аппаратных UART (Mega2560 или Leonardo, например). Выводит данные на Serial.

// This code is only for Mega2560 and Leonardo:
// the boards which have at least two hardware UART ports.

#if !defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__)

#include <SoftwareSerial.h>

#define SERIAL2_RX_PIN 10
#define SERIAL2_TX_PIN 11

SoftwareSerial Serial2(SERIAL2_RX_PIN, SERIAL2_TX_PIN);

#endif // end of Arduino Mega detection

#define SERIAL_A Serial1
#define SERIAL_B Serial2
#define SERIAL_MONITOR Serial

#define SERIAL_X_RATE 9600

// Must be no less than SERIAL_X_RATE,
// and actually should be greater.
#define SERIAL_MONITOR_RATE 115200

#define START_DELAY 2000 // 2 seconds

void setup() {
  char c;

  SERIAL_A.begin(SERIAL_X_RATE);
  SERIAL_B.begin(SERIAL_X_RATE);
  SERIAL_MONITOR.begin(SERIAL_MONITOR_RATE);

  delay(START_DELAY);

  SERIAL_MONITOR.println("start monitoring");
  for (;;) {
    if (SERIAL_A.available()) {
      c = SERIAL_A.read();
      SERIAL_B.write(c);
      SERIAL_MONITOR.write(c);
    }
    if (SERIAL_B.available()) {
      c = SERIAL_B.read();
      SERIAL_A.write(c);
      SERIAL_MONITOR.write(c);
    }
  }
}

void loop() {}

Сам сейчас занимаюсь отладкой SIM5360E, c SIM800L намучался уже, не везёт мне с ними как-то...

 

на меге 2560 и так все работает. Никакая SoftwareSerial библиотека не нужна.

Olvin
Offline
Зарегистрирован: 01.08.2018

stasych пишет:

Вот в том то и дело, что на аппаратных UARTах проблем нет. А я пытаюсь подключиться через программный UART. 

После долгих тыканий получается что-то непонятное. При подключении шилда СИМ900 без ардуины, напрямую к порту шилд адекватно работает только на той скорости, которая проставлена в свойствах порта в диспетчере устройств. 

А вот при подключении через ардуину все как то странно. Раньше было как я писал выше - тупо эхо, которое никакой командой не отключается. А теперь в скетче я прописываю 9600 а мониторе порта мне приходится прописать 115200, чтобы что-то увидеть (не квадратики).  "arduino start 1" вижу а вот на команды никакой реакции нет.

С каждым разом все интереснее и интереснее. В инете везде написано как подключить шилд к ардуино уно. Как кто подключал к минику я нигде не нашел. Может в этом случае есть какой-то подводный камень?

Я не совсем понимаю, как вы сможете мониторить соединение без зеркалирования их на отдельный (третий) порт. Или вы куда-то пишете (SD, FRAM, EEPROM), а потом анализируете?

А с программными UART кругом проблемы. Я, когда писал это, пытался прикрутить ещё и AltSoftSerial. чтобы можно было и на Uno/Nano запускать. Но - не взлетело, получил кракозябры. Дело в том, что когда срабатывает прерывание для, например, SoftwareSerial, запрещаются прерывания для AltSoftSerial. В итоге получаем нехилую вероятность пропустить пришедшие данные. Потому и надо выставлять Скорости разные :(

Общий смысл: программые UART там, где в прерываниях не делается больше никакая время- или ресурсоёмкая работа. Иначе - не успеваем принимать.

Olvin
Offline
Зарегистрирован: 01.08.2018

stasych пишет:

Olvin пишет:

Может пригодится. Написал тут монитор последовательного соединения между двумя устройствами. Работает только на устройствах, где есть хотя бы два аппаратных UART (Mega2560 или Leonardo, например). Выводит данные на Serial.

// This code is only for Mega2560 and Leonardo:
// the boards which have at least two hardware UART ports.

#if !defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__)
...
void loop() {}

Сам сейчас занимаюсь отладкой SIM5360E, c SIM800L намучался уже, не везёт мне с ними как-то...

на меге 2560 и так все работает. Никакая SoftwareSerial библиотека не нужна.

Ну так для Меги оно и не задействуется: условная компиляция. Это писалось с оглядкой на универсальность.

stasych
Offline
Зарегистрирован: 16.03.2016

Olvin]</p> <p>[quote=stasych пишет:

 

Общий смысл: программые UART там, где в прерываниях не делается больше никакая время- или ресурсоёмкая работа. Иначе - не успеваем принимать.

 

В моем коде пока кроме перекидывания из одного сериала в другой ничего нет. Вот и не пойму почему не работает. По всему инету ведь написано - берешь Уно и СИМ900 три проводка, отдельное питание и все пашет с библиотекой СофтвареСериал.

А вообще закажу ка я Мегу2560.

Olvin
Offline
Зарегистрирован: 01.08.2018

stasych]</p> <p>[quote=Olvin пишет:

stasych пишет:

 

Общий смысл: программые UART там, где в прерываниях не делается больше никакая время- или ресурсоёмкая работа. Иначе - не успеваем принимать.

 

В моем коде пока кроме перекидывания из одного сериала в другой ничего нет. Вот и не пойму почему не работает. По всему инету ведь написано - берешь Уно и СИМ900 три проводка, отдельное питание и все пашет с библиотекой СофтвареСериал.

А вообще закажу ка я Мегу2560.

Попробуйте всё-таки набросать схему, которая у вас не работает. Пока я понял, что вы между sim900 и Arduino воткнули для отладки другую Arduino. Вот только как это помогает отладить - непонятно.

Если же приведённый вами скетч - только выжимка из реальной программы, тогда нужно разбираться, какие там ещё библиотеки, кроме SoftwareSerial и как они используют прерывания? И сюрпризы при этом могут быть всякие.