модем d-link 2640u и arduino uno

art_maestro
Offline
Зарегистрирован: 26.03.2013

Здравствуйте. 

У меня такая проблема. 

Нужно получить некоторые данные от модема d-link 2640u через arduino.

Подключаю модем к ардуино следующим образом:

Модем   Ардуино

rx       ->    tx

tx       ->   rx

gnd    ->    gnd

Для наглядности внутринности модема

Отправляю команды для авторизации и не посредственно команду для получения информации. В результате хочу получить в Мониторе порта текст (хотя бы слово).

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

const int buttonPin = 2;     // номер входа, подключенный к кнопке
const int ledPin =  13;      // номер выхода светодиода
byte incomingByte;          // для хранения полученных данных

char* AT_command_string = "admin";                     //логин и пароль
char* AT_command_string2 = "adsl info";              // команда

// переменные
int buttonState = 0;         // переменная для хранения состояния кнопки
 
void setup() {
  Serial.begin (115200);            // скорость 
  // инициализируем пин, подключенный к светодиоду, как выход
  pinMode(ledPin, OUTPUT);     
  // инициализируем пин, подключенный к кнопке, как вход
  pinMode(buttonPin, INPUT);   
}
 
void loop(){
  // считываем значения с входа кнопки
  buttonState = digitalRead(buttonPin);
  
  // проверяем нажата ли кнопка
  // если нажата, то buttonState будет HIGH:
  if (buttonState == HIGH) {   
    // включаем светодиод   
    digitalWrite(ledPin, HIGH); 

    Serial.write(AT_command_string+"\13"); // передача на модем admin - логин
    Serial.flush();                                                  // ждем окончания передачи
 
    Serial.write(AT_command_string+"+\13"); // передача пароля admin
    Serial.flush();                                                   // ждем окончания передачи

    Serial.write(AT_command_string2+"\13");    // передача команды
    Serial.flush();                                                      //ждем окончания передачи
}
  else {
    // выключаем светодиод
    digitalWrite(ledPin, LOW);  
  }

    if (Serial.available()>0) {              // если что-то есть в буфере
 
     incomingByte =Serial.read();        // то читаем и приравниваем переменной
     Serial.print("I received: ");               //выводим в Монитор порта сообщение
     Serial.println(incomingByte);         // выводим, что получили
   }
}

 

 

 

maksim
Offline
Зарегистрирован: 12.02.2012

Интересно как этот код может дать результат если он даже не скомпилируется... - это раз. А два при таком подключении в мониторе вы можете увидить только то что сами отправляете.

art_maestro
Offline
Зарегистрирован: 26.03.2013

Я понял о чем Вы. Это я уже допустил ошибку, но даже не считая ошибку, все равно не работает.

29     Serial.write("admin\13"); // передача на модем admin - логин
30     Serial.flush();                                                  // ждем окончания передачи
31  
32     Serial.write("admin\13"); // передача пароля admin
33     Serial.flush();                                                   // ждем окончания передачи
34  
35     Serial.write("adsl info\13");    // передача команды
36     Serial.flush();           

таким образом была реализована передача на модем, в одной из тем данного форума. Правда модем использовался совершенно другой. Как мне можно получить данные. Потому что я вообще не могу понять, проходит ли вообще процесс авторизации или нет.

 

Подскажите как правильно подключить? Я так подключил, исходя из примера

 

art_maestro
Offline
Зарегистрирован: 26.03.2013

Или лучше здесь применить библиотеку  SoftwareSerial.h?

Здесь я делал отправку/прием данных через блютуз

#include <SoftwareSerial.h>   // Модуль для работы с Serial
 
int incomingByte = 0;         // Переменная для хранения входных данных
 
SoftwareSerial mySerial(9, 8); // Пины для RX, TX 
 
void setup()
{
   mySerial.begin(9600);           // Скорость передачи по Serial
}
void loop()
{
  if(mySerial.available()>0)       // Если имеются в порту данные
  {
     incomingByte = mySerial.read();    // считывание данных
      if(incomingByte!=-1)              // если данные не равны -1
      {
        mySerial.print("\nI received: ");        //вывод сообщения
        mySerial.println(incomingByte, DEC);  // вывод данных
      }
  }
}

 

art_maestro
Offline
Зарегистрирован: 26.03.2013

Авторизацию на модеме выполнил. Информация подойдет как для D-link 2640 так и для D-link 2500 модемов. Только распиновка будет разной!

Не сочтите за спам. Здесь более подробно показ процесс подключения Ардуино к модему и написания программы авторизации