Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Аппаратные модули
  3. USB устройства
  4. Raspberry Pi подключение GPS USB приемника

Raspberry Pi подключение GPS USB приемника

Запланировано Прикреплена Закрыта Перенесена USB устройства
1 Сообщения 1 Posters 131 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано pi
    #1

    Недавно нашел у себя USB-GPS приемник, если не ошибаюсь модель от GlobalSat BU 353. Вот и решил его подключить к Raspberry Pi. После подключения он обнаружился хорошо , проблем вообще не было никаких:

    #lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial PortBus 001 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    

    Вот наш девайс: Prolific Technology, Inc. PL2303 Serial Port

    В /dev/ появилось новое устройство ttyUSB0, к нему и будем подключаться, насколько я помню, у большинства подобных девайсов скорость 4800. Ниже скрипт на PHP с использованием свободной библиотеки php_serial.class.php, с ней довольно просто работать.

    #!/usr/bin/php5
    // подключаем библиотеку
    require("php_serial.class.php");
    $serial=new phpSerial();
    // выбираем порт
    $serial->deviceSet("/dev/ttyUSB0");
    // скорость
    $serial->confBaudRate(4800); 
    // ниже параметры как правило стандартные
    $serial->confParity("none");
    $serial->confCharacterLength(8);
    $serial->confStopBits(1);
    $serial->confFlowControl("none"); 
    // открываем порт
    $serial->deviceOpen();
     $loop=1;
     while($loop==1){     
    $get=$serial->readPort(); 
    // если включить print , то будут все строки NMEA протокола
    // print $get;        
    
    if(substr($get,1,5) == "GPGGA")     
    {      
     // если включить print , то будет только $GPGGA      
     //print $get;        
     // парсим строку         
     list($gga,$time,$lat,$NS,$lng,$EW,$state)=explode(",",$get);
     /* расшифровка строки $GPGGA,155004.000,4253.9372,N,04108.1511,E,1,08,1.2,18.4,M,27.4,M,,0000*68$GPGGA -- название пакета 155004.000 -- время гринвич 4253.9372,N,-- широта 04108.1511,E,-- доолгота 1-- если 1 то данные достоверны , если 0 то данные сомнительные в данном случае это переменная $state остальное можно прочитать в справочниках по NMEA протоколу,08,1.2,18.4,M,27.4,M,,0000*68*/             
         
     if($state == "1")   
    {                   
    /* сохраняем в текстовый файл , но не обязательно, можно закомментировать и использовать                          перенаправление через print, типа       
    #./gps.php > куда то, или                    
    #./gps.php | proga.sh    */                    
    // путь куда  положить файл                   
    $fp=fopen('/h/pi/robot/gps/gga.txt','wt');                      
    if($fp)                     
    {                        
    fputs($fp,$get);                     
    // print $get;                     
    }                    
    fclose($fp); //ставим задержку 10 секунд , но реально лучше ставить минуты 3-5 , зависит от задачи
    
    sleep(10);       
             } }}  
    $serial->deviceClose();?>
    

    Это был простой пример , как получить данные из GPS приемника, обработку полученных данных можно реализовать разными способами, равно как и запуск скрипта. Я поставил периодичность запросов 10 секунд чисто для примера, хотя можно убрать sleep(10) и запускаться через cron.

    Ниже рабочий пример скрипта для отображения координат на картах Google.

    // получим данные из текстового файла
    $gga=shell_exec("cat /home/pi/robot/gps/gga.txt");
    // пропарсим строку
    list($gga,$time,$lat,$NS,$lng,$EW,$state)=explode(",",$gga);
    // показываем полученные данные
    print "Time: ".$time."      Lat: ".$lat." Lang: ".$lng."     State: ".$state;
     // преобразуем широту и долготу к формату Google
     $Lat=round(floor($lat/100)+(($lat/100)-floor($lat/100))/0.6,6);
    $Lng=round(floor($lng/100)+(($lng/100)-floor($lng/100))/0.6,6); 
    // диаметр круга
    $Acc="20";
    // дальше обработка данных средствами Google API 3 
    print " Google Maps JavaScript API v3(Street View) 
    function initialize() { var moscow = new google.maps.LatLng(".$Lat.",".$Lng.");
    var mapOptions = {center: moscow,zoom: 18,mapTypeId: google.maps.MapTypeId.SATELLITE,panControl: false,zoomControl: true,mapTypeControl: false,scaleControl: false}; 
     var map = new google.maps.Map(document.getElementById(\"map_canvas\"), mapOptions); 
     var circle = new google.maps.Circle({radius: ".$Acc.",map: map, center: moscow,fillOpacity: 0.2,strokeOpacity: 0.5,strokeColor: '#00CCCC', fillColor: '#33CCFF', strokeWeight: 1 }); 
     var marker = new google.maps.Marker({position: moscow,map: map,title:\"Lat:".$Lat." Long:".$Lng." Acc:".$Acc." \" });  }  "; ?>
    
    1 ответ Последний ответ
    0

    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Login or register to search.
    • Первое сообщение
      Последнее сообщение
    0
    • Категории
    • Главная
    • Документация
    • Последние
    • Пользователи