Запись данных на HD компьютера

Voronar
Offline
Зарегистрирован: 30.04.2012

Здравствуйте, уважаемые люди. Программированием Arduino я ещё не занялся, но в ближайшем будущем встанет такая задача. На данный момент я хочу узнать, как можно записать данные, например, с вот такого GPS-модуля на жесткий диск компьютера, чтобы потом в дальнейшем воспользоваться этими данными из какой-нибудь IDE программирования.

Я видел, что данные с GPS-модуля выводятся через терминальные программы. Может у этих программ есть экспорт данных? Но ведь его придется делать вручную. А мне нужно автоматическую запись данных на жесткий диск компьютера. Что посоветуете?

В будущем ещё придется работать с данными  датчика влажности/температуры.

Zaliv
Offline
Зарегистрирован: 05.03.2011

Там у них есть подробное описания как использовать Ардуино в качестве моста между модулем и компьютером. http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-gps#nmea_pc . Что интересно в нем даже вынимается Atmega чип, т.е. Ардуино в этом случае больше ничего слушать не сможет.

Есть у них, там же код, где просто получаются данные с модуля и пересылаются по Serial. Это фактически весь код, который Вам нужен для Arduino.

/*
  *  Copyright (C) 2010 Libelium Comunicaciones Distribuidas S.L.
  *  http://www.libelium.com
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
  *  the Free Software Foundation, either version 3 of the License, or
  *  (at your option) any later version.
  * 
  *  This program is distributed in the hope that it will be useful,
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *  GNU General Public License for more details.
  * 
  *  You should have received a copy of the GNU General Public License
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  *  Version 0.1
  *  Author: Marcos Yarza
  */

// include the SoftwareSerial library
#include <SoftwareSerial.h>

// Constants
#define rxPin 9      //rx pin in gps connection
#define txPin 8      //tx pin in gps connection

// set up the serial port

SoftwareSerial gps = SoftwareSerial(rxPin, txPin);

// variables
byte byteGPS = 0;
int i = 0;
int h = 0;

// Buffers for data input
char inBuffer[300] = "";
char GPS_RMC[100]="";
char GPS_GGA[100]="";

void setup(){

  //setup for mySerial port
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  gps.begin(4800);
  
  //setup for Serial port
  Serial.begin(19200);
  
  delay(1000);
}

void loop(){
  
  // Read the RMC sentence from GPS
  byteGPS = 0;
  byteGPS = gps.read();
  while(byteGPS != 'R'){
    byteGPS = gps.read();
  }
  GPS_RMC[0]='$';
  GPS_RMC[1]='G';
  GPS_RMC[2]='P';    
  GPS_RMC[3]='R';
  
    i = 4;
    while(byteGPS != '*'){                  
      byteGPS = gps.read();         
      inBuffer[i]=byteGPS;
      GPS_RMC[i]=byteGPS;
      i++;                      
  }
  
  // Read GGA sentence from GPS
  byteGPS = 0;
  byteGPS = gps.read();
  while(byteGPS != 'A'){
    byteGPS = gps.read();
  }
  GPS_GGA[0]='$';
  GPS_GGA[1]='G';
  GPS_GGA[2]='P';    
  GPS_GGA[3]='G';
  GPS_GGA[4]='G';
  GPS_GGA[5]='A';
  
    i = 6;
    while(byteGPS != '*'){                  
      byteGPS = gps.read();         
      inBuffer[i]=byteGPS;
      GPS_GGA[i]=byteGPS;
      i++;                      
  }
    
  // print the GGA sentence to USB
  Serial.print("GGA sentence: ");
  h = 0;
  while(GPS_GGA[h] != 42){
    Serial.print(GPS_GGA[h],BYTE);
    h++;
  }
  Serial.println();
  
  // print the RMC sentence to USB
  Serial.print("RMC sentence: ");
  h = 0;
  while(GPS_RMC[h] != 42){
    Serial.print(GPS_RMC[h],BYTE);
    h++;
  }
  Serial.println();
}

Другое дело, что Вам нужна будет еще какая-то утилита на компе, которая будет слушать  Serial порт и писать на диск лог.

 

 

Voronar
Offline
Зарегистрирован: 30.04.2012

 В том, как посылаются данные на serial порт я разберусь. По крайней мере, информация по этому вопросу исчерпывающая.

Да, главный вопрос в том, чтобы "слушать Serial порт и писать на диск лог". Я слышал, что есть API для работы с com-портами, реализованные на С\C++. Не хотелось бы с ними копаться.

Буду рад советам профессионалов. Кто-то же сталкивался с такой проблемой.

leshak
Offline
Зарегистрирован: 29.09.2011
> подробное описания как использовать Ардуино в качестве моста между модулем
На самом деле ардуино тут не нужна. Достаточно любого uart <-> usb конвертера.
Просто можно ее использовать в качестве такого конвертера, если другого нет. Если модифицировать данные никак не нужно, то досточно соеденить RX,TX пины дуины и модуля (не перекрещивая). Данные будут видны с компа. А в дуино записать "чистый скетч", который ничего не делает (главное что-бы он сам в Serial ничем не плевался).
 
 По поводу тулзы для логинга:
Во первых написать "такую программу", при при минимальном знании любого языка - дело от минут, до десятков минут.
 
В псевдокоде она будет выглядить так:
1. Открываем порт и файл
2. while( isLogging){ file.writeByte(serial.ReadByte)
3. Закрываем порт и файл

 
 

Во вторых, можно ничего не писать, а взять терминальную програму.

Куча их гуглится, я пользую это http://easyelectronics.ru/terminalnye-programmy.html которая умеет писать лог. Не знаю лучшие это или нет, первое что нагуглилось и мне подошло.

На крайний случай сделать в стандартном ардуиновском терминале ctrl+c открыть,блокнот ctrl-v и сохранить файл.

 

В третьих, можно вообще ничего не качать и не писать.

Просто выполнить команды в command line (cmd.exe) 

Установить скорость порта:mode com3:115200,n,8,1

Записываем в файл: type com3: >> arduiono.log.txt

Или: copy com3: arduiono.log.txt

-----------------

Когда надоест - нажимаем ctrl-c

Единсвенный минус: команда copy - подтирает за собой файл после того как ее прервешь (зато можно в realtime смотреть, данные в файле), а команда type - кешируют запись по 512 байт, так что "хвост лога" может потерятся (зато файлик остается, послы обрывания).

 

 

Voronar
Offline
Зарегистрирован: 30.04.2012

Спасибо за информацию. Буду пробовать  разные способы. Думаю, у меня ещё возникнет достаточно вопросов.

Ещё такой простой вопрос: как определить к какому порту сейчас подсоединилась моя ардуинка, не используя IDE Arduino?

leshak
Offline
Зарегистрирован: 29.09.2011

 http://arduino.ru/Guide/Windows#4

Раздел "Установите драйвера", один из шагов - определение на каком порту висит.

Voronar
Offline
Зарегистрирован: 30.04.2012

 Это аппаратно-логический метод определения. То есть подключая руки и логику.

А можно как-то программно определить нужный порт? Смысл в том, чтобы, подключая моё устройство(ардуино) к другому компьютеру, программный код, отвечающий за манипулирование полученной информации с этого устройства, получал номер того порта, к которому подключено это устройство, а не константный номер(для одного конкретного компьютера, в данном случае моего).

leshak
Offline
Зарегистрирован: 29.09.2011

 >А можно как-то программно определить нужный порт?

Общий ответ - нет. Ком порт слишком тупая и древняя вещь. Стандартами не определенно что устройство должно "называть себя". Это одна из причин почему появился USB :) И почему он дороже. Бо "логики" там намного больше. Там устройство и "кто оно" рассказыает, и с какой скоростью хочет работать, и сколько тока планирует жрать и т.п.

Не обрали внимание что все программы (в т.ч. arduino IDE) просят указать com-порт руками? Вот именно поэтому.

Некоторые программы сканируют com-порты. Ищут "свое устроство". Делается это примерно так:

Пишите скетч. Который при включении (или при получении заданого "кодового слова") возвращает "я супер-пупер-девайс".

Ну а программа на компе, опрашивает все компорты которые найдет на PC. И смотрит кто же ей скажет "я супер-пупер-девайс".

Но если портов много (например блютусы любят их создавать десятками) - это может растянутся на долго. Или какое-то другое устройство, подключенное тоже на com-порт, может не так понять этот "опрос" и сделать что-нибудь что не ждали (например тупо перегрузится при открытие порта).

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

Voronar
Offline
Зарегистрирован: 30.04.2012

Тогда можно просто написать в руководстве по пользованию этим устройством необходимые инструкции. Ещё раз спасибо за информацию.