модем d-link 2640u и arduino uno
- Войдите на сайт для отправки комментариев
Втр, 23/04/2013 - 00:57
Здравствуйте.
У меня такая проблема.
Нужно получить некоторые данные от модема 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); // выводим, что получили
}
}
Интересно как этот код может дать результат если он даже не скомпилируется... - это раз. А два при таком подключении в мониторе вы можете увидить только то что сами отправляете.
Я понял о чем Вы. Это я уже допустил ошибку, но даже не считая ошибку, все равно не работает.
29Serial.write("admin\13");// передача на модем admin - логин30Serial.flush();// ждем окончания передачи3132Serial.write("admin\13");// передача пароля admin33Serial.flush();// ждем окончания передачи3435Serial.write("adsl info\13");// передача команды36Serial.flush();таким образом была реализована передача на модем, в одной из тем данного форума. Правда модем использовался совершенно другой. Как мне можно получить данные. Потому что я вообще не могу понять, проходит ли вообще процесс авторизации или нет.
Подскажите как правильно подключить? Я так подключил, исходя из примера.
Или лучше здесь применить библиотеку 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); // вывод данных } } }Авторизацию на модеме выполнил. Информация подойдет как для D-link 2640 так и для D-link 2500 модемов. Только распиновка будет разной!
Не сочтите за спам. Здесь более подробно показ процесс подключения Ардуино к модему и написания программы авторизации