<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.arobose.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://www.arobose.com/wiki/index.php?action=history&amp;feed=atom&amp;title=GPS_LEA-5H_shield_Arduino</id>
		<title>GPS LEA-5H shield Arduino - Historique des versions</title>
		<link rel="self" type="application/atom+xml" href="https://www.arobose.com/wiki/index.php?action=history&amp;feed=atom&amp;title=GPS_LEA-5H_shield_Arduino"/>
		<link rel="alternate" type="text/html" href="https://www.arobose.com/wiki/index.php?title=GPS_LEA-5H_shield_Arduino&amp;action=history"/>
		<updated>2026-04-05T20:01:54Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.19.7</generator>

	<entry>
		<id>https://www.arobose.com/wiki/index.php?title=GPS_LEA-5H_shield_Arduino&amp;diff=92&amp;oldid=prev</id>
		<title>Ldoffe : GPS LEA-5H shield Arduino exemple d'utilisation</title>
		<link rel="alternate" type="text/html" href="https://www.arobose.com/wiki/index.php?title=GPS_LEA-5H_shield_Arduino&amp;diff=92&amp;oldid=prev"/>
				<updated>2013-10-03T14:13:42Z</updated>
		
		<summary type="html">&lt;p&gt;GPS LEA-5H shield Arduino exemple d&amp;#039;utilisation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;La shield GPS pour ARDUINO basée sur le module [http://www.u-blox.com/en/lea-5h.html LEA_5H] de U-BLOX permet une location fiable en extérieure. Couplé à une antenne GPS, le LEA-5H permet de recevoir les signaux satellites GPS et GALILEO.&lt;br /&gt;
&lt;br /&gt;
Cette [http://www.dfrobot.com/wiki/index.php?title=DFRduino_GPS_Shield-LEA-5H_%28SKU:TEL0044%29 shield], proposée par DFRobot , permet une utilisation simple du module en intégrant les composants nécessaire à son utilisation (régulation de tension, résistances de pull-up pour la liaison i2c, led de power et fonctionnement, connecteur USB et antenne...).&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
Le module LEA-5H intègre plusieurs mode de communication : USB, série, i2c.&lt;br /&gt;
&lt;br /&gt;
Il suit la norme [http://fr.wikipedia.org/wiki/NMEA_0183 NMEA 0183] et envoie plusieurs trames GPS : RMC, VTG, GGA, GSA, GSV, GLL.&lt;br /&gt;
GGA est la plus courante, elle donne la position (latitude, longitude et altitude) du récepteur. Le détail des trames est expliquées [http://www.u-blox.com/images/downloads/Product_Docs/u-blox5_Protocol_Specifications%28GPS.G5-X-07036%29.pdf ici].&lt;br /&gt;
&lt;br /&gt;
Toutes les trames sont envoyées à chaque demande sous forme de caractères ASCII. Le code de la trame est envoyée en tête en commençant par $ (par exemple, $GPGGA) puis chaque valeur séparée par une virgule (4825.2680,N,00110.3895,E). Si la valeur n'est pas disponible (perte de communication avec le satellite) elle n'est pas envoyée, seules les virgules permettent de connaître le paramètre ($GPGGA,,,,,,,,,).&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
La shield peut être branchée à un ordinateur (port USB). Les données GPS sont directement transmises et peuvent être lues grâce à un terminal série (9600 bauds, 8 bits, 1 bit stop, sans parité). Les trames RMC, VTG, GGA, GSA, GSV et GLL sont envoyées environ toutes les secondes.&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
La liaison i2c se fait grâce à une ARDUINO.&lt;br /&gt;
&lt;br /&gt;
==== Exemple Langage ARDUINO ====&lt;br /&gt;
&lt;br /&gt;
Un exemple est expliqué [http://www.dfrobot.com/wiki/index.php?title=DFRduino_GPS_Shield-LEA-5H_%28SKU:TEL0044%29 ici].&lt;br /&gt;
&lt;br /&gt;
==== Exemple Langage C ====&lt;br /&gt;
&lt;br /&gt;
La liaison twi (i2c) et les fonctions sont expliquées [http://geonobotwiki.free.fr/doku.php?id=robotics:computing:communication_twi_entre_atmega ici]&lt;br /&gt;
&lt;br /&gt;
Pour notre exemple, nous utilisons une carte ARDUINO UNO configurée en maitre. Le module GPS est utilisé en esclave à l'adresse 0x42.&lt;br /&gt;
Les trames GPS sont stockées à l'adresse 0xFF. Nous utiliserons la trame GGA pour afficher la position ( latitude, longitude et l'altitude) du récepteur GPS.&lt;br /&gt;
&lt;br /&gt;
Nous avons créé une structure gps qui contient la latitude, longitude et l'altitude. Les données sont stockées sous forme de chaînes de caractères ASCII. Par exemple, pour une latitude de 48°45'2584, la chaine latitude contiendra le code ASCII de chaque valeur : 52 (pour 4), 56 (pour 8)...&lt;br /&gt;
&lt;br /&gt;
Comme tous les formats de trames sont envoyés, il faut retrouver la trame GGA et identifier les paramètres qui nous intéresse. Pour commencer, on demande une lecture de 200 octets. Une fois reçus, la fonction gps_gpgga() parcourt le buffer pour retrouver la séquence $GPGGA. Quand l'entête a été retrouvée, il suffit de compter les virgules pour connaître le paramètre.&lt;br /&gt;
La fonction gps_print() permet d'envoyer les paramètres sur le port série pour les afficher dans un terminal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  uint8_t latitude[9];&lt;br /&gt;
  uint8_t dir_lat;&lt;br /&gt;
  uint8_t longitude[11];&lt;br /&gt;
  uint8_t dir_long;&lt;br /&gt;
  uint8_t altitude[5];&lt;br /&gt;
} gps;&lt;br /&gt;
&lt;br /&gt;
/* GPS GGA message */&lt;br /&gt;
gps&lt;br /&gt;
gps_gpgga(uint8_t *buffer)&lt;br /&gt;
{&lt;br /&gt;
  gps g;&lt;br /&gt;
  uint8_t gpgga[6] =&lt;br /&gt;
    { '$', 'G', 'P', 'G', 'G', 'A' };&lt;br /&gt;
&lt;br /&gt;
  uint8_t header = 0;&lt;br /&gt;
  uint8_t j = 0, count = 0;&lt;br /&gt;
&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 200; i++)&lt;br /&gt;
    {&lt;br /&gt;
      if (!header)&lt;br /&gt;
        {&lt;br /&gt;
          if (buffer[i] == gpgga[j])&lt;br /&gt;
            {&lt;br /&gt;
              j++;&lt;br /&gt;
              if (j == 6)&lt;br /&gt;
                {&lt;br /&gt;
                  header = 1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
      else&lt;br /&gt;
        {&lt;br /&gt;
          if (buffer[i] == ',')&lt;br /&gt;
            {&lt;br /&gt;
              count++;&lt;br /&gt;
              j = 0;&lt;br /&gt;
            }&lt;br /&gt;
          else&lt;br /&gt;
            {&lt;br /&gt;
              switch (count)&lt;br /&gt;
                {&lt;br /&gt;
              case 1: // utc time&lt;br /&gt;
                break;&lt;br /&gt;
              case 2: // latitude&lt;br /&gt;
                g.latitude[j] = buffer[i];&lt;br /&gt;
                break;&lt;br /&gt;
              case 3: // direction latitude&lt;br /&gt;
                g.dir_lat = buffer[i];&lt;br /&gt;
                break;&lt;br /&gt;
              case 4: // longitude&lt;br /&gt;
                g.longitude[j] = buffer[i];&lt;br /&gt;
                break;&lt;br /&gt;
              case 5: // direction longitude&lt;br /&gt;
                g.dir_long = buffer[i];&lt;br /&gt;
                break;&lt;br /&gt;
              case 9: // altitude&lt;br /&gt;
                g.altitude[j] = buffer[i];&lt;br /&gt;
                break;&lt;br /&gt;
              case 10: //&lt;br /&gt;
              default:&lt;br /&gt;
                break;&lt;br /&gt;
                }&lt;br /&gt;
              j++;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
  return g;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
gps_print(gps g)&lt;br /&gt;
{&lt;br /&gt;
  uint8_t lat[11] =&lt;br /&gt;
    { &amp;quot;latitude : &amp;quot; };&lt;br /&gt;
  uint8_t lon[12] =&lt;br /&gt;
    { &amp;quot;longitude : &amp;quot; };&lt;br /&gt;
  uint8_t alt[11] =&lt;br /&gt;
    { &amp;quot;altitude : &amp;quot; };&lt;br /&gt;
&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 11; i++)&lt;br /&gt;
    {&lt;br /&gt;
      usart_0_transmit(lat[i]);&lt;br /&gt;
    }&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 9; i++)&lt;br /&gt;
    {&lt;br /&gt;
      usart_0_transmit(g.latitude[i]);&lt;br /&gt;
    }&lt;br /&gt;
  usart_0_transmit(' ');&lt;br /&gt;
  usart_0_transmit(g.dir_lat);&lt;br /&gt;
  usart_0_transmit('\n');&lt;br /&gt;
&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 12; i++)&lt;br /&gt;
    {&lt;br /&gt;
      usart_0_transmit(lon[i]);&lt;br /&gt;
    }&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 11; i++)&lt;br /&gt;
    {&lt;br /&gt;
      usart_0_transmit(g.longitude[i]);&lt;br /&gt;
    }&lt;br /&gt;
  usart_0_transmit(' ');&lt;br /&gt;
  usart_0_transmit(g.dir_long);&lt;br /&gt;
  usart_0_transmit('\n');&lt;br /&gt;
&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 11; i++)&lt;br /&gt;
    {&lt;br /&gt;
      usart_0_transmit(alt[i]);&lt;br /&gt;
    }&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
    {&lt;br /&gt;
      usart_0_transmit(g.altitude[i]);&lt;br /&gt;
    }&lt;br /&gt;
  usart_0_transmit(' ');&lt;br /&gt;
  usart_0_transmit('m');&lt;br /&gt;
  usart_0_transmit('\n');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
setup(void)&lt;br /&gt;
{&lt;br /&gt;
  twi_master_setup();&lt;br /&gt;
  usart_0_setup();&lt;br /&gt;
  usart_0_transmitter_enable();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int&lt;br /&gt;
main(void)&lt;br /&gt;
{&lt;br /&gt;
  gps g;&lt;br /&gt;
  setup();&lt;br /&gt;
  while (1)&lt;br /&gt;
    {&lt;br /&gt;
      uint8_t reg = 0xFF;&lt;br /&gt;
      uint8_t buffer[200];&lt;br /&gt;
      twi_read_bytes((0x42 &amp;lt;&amp;lt; 1), &amp;amp;reg, 200, buffer);&lt;br /&gt;
&lt;br /&gt;
      g = gps_gpgga(buffer);&lt;br /&gt;
&lt;br /&gt;
      gps_print(g);&lt;br /&gt;
      _delay_ms(2000);&lt;br /&gt;
    }&lt;br /&gt;
  return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Produits]]&lt;/div&gt;</summary>
		<author><name>Ldoffe</name></author>	</entry>

	</feed>