Commande prises en 433Mhz Commande prises en 433Mhz
Menu

Commande prises en 433Mhz

7 juin 2015 - Arduino, Domotique, Raspberry Pi
Commande prises en 433Mhz

Il y a déjà quelque temps j’avais écrit sur ce blog :

J’ai aussi des prises avec télécommande en 433Mhz achetées 12€ les trois dans un magasin de bricolage je vais voir si je peux les piloter avec Arduino et Raspberry.

Il m’a fallu beaucoup de temps et d’autre projet pour finir cela.

Et de plus je viens de voir que les prises utilisées sont en vente chez Conrad ICI au prix de 24.99€. Bon moi j’ai payé le kit 12€ dans un magasin de bricolage :).

Je me pose la question si chaque kit utilise les mêmes fréquences ?

Donc avec un Arduino UNO un émetteur 4.33Mhz une platine ethernet et mes prise j’ai réussit à faire une commande par une page web : 3-prise

 

Et ça marche comme cela :

D’abord j’ai utilisé la librairie : https://github.com/sui77/rc-switch

En branchant un récepteur sur un Arduino j’ai obtenu l’ensemble des codes de la télécommande.  Vous trouverez le code ICI 

Pour mon shield ethernet j’ai utilisé cette librairie : https://github.com/jcw/ethercard vous trouverez les branchement du shield sur le GitHub.

J’ai d’abord fait un programme me permettant de commander les prises et une fois tout OK j’ai travaillé sur la partie commande du shield par une page internet installer sur mon Rasberry PI (celui du DashScreen).

Je vous donne le programme de l’Arduino :

#include <RCSwitch.h>
#include <EtherCard.h>

static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192,168,0,32 };
static byte gwip[] = { 192,168,0,254 };

byte Ethernet::buffer[700]; // tcp/ip send and receive buffer

RCSwitch rf_cmd = RCSwitch(); // initialisation
const char rf_mode = 24; // mode 24 bits
const char rf_pin = 10; // l'emetteur est connecte au pin 10 de l'arduino

// Small web page to return so the request is completed
const char page[] PROGMEM =
"HTTP/1.0 503 Service Unavailable\r\n"
"Content-Type: text/html\r\n"
"Retry-After: 600\r\n"
"\r\n"
"<html>"
"<head><title>"
"Arduino 192.168.0.32"
"</title></head>"
"<body>"
"

<br />
<h3>Arduino 192.168.0.32</h3>
<p>

"
"</body>"
"</html>"
;

void setup(){
ether.begin(sizeof Ethernet::buffer, mymac);
ether.staticSetup(myip, gwip);
ether.hisport = 85;

rf_cmd.enableTransmit(rf_pin); // emetteur sur la broche 10
rf_cmd.setProtocol(1);
rf_cmd.setRepeatTransmit(15);
}

void rf_send(unsigned long rf_code) {
rf_cmd.send(rf_code, rf_mode);
}

void loop(){

word len = ether.packetReceive();
word pos = ether.packetLoop(len);

// IF LED1=ON turn it ON
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED1=ON") != 0) {
rf_send(1381719);
}

// IF LED1=OFF turn it OFF
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED1=OFF") != 0) {
rf_send(1381716);
}
// IF LED2=ON turn it ON
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED2=ON") != 0) {
rf_send(1394007);
}

// IF LED2=OFF turn it OFF
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED2=OFF") != 0) {
rf_send(1394004);
}

// IF LED3=ON turn it ON
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED3=ON") != 0) {
rf_send(1397079);
}

// IF LED3=OFF turn it OFF
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED3=OFF") != 0) {
rf_send(1397076);
}

//Return a page so the request is completed.

memcpy_P(ether.tcpOffset(), page, sizeof page);
ether.httpServerReply(sizeof page - 1);
}

Ensuite le programme installé sur le Raspberry PI un mélange de PHP et HTML.

<?php if ((!(isset($_POST["LED1"]))) & (!(isset($_POST["LED2"]))) & (!(isset($_POST["LED3"]))) ) { $imageled1 = "bouton/BoutonON.gif"; $imageled1M = "bouton/BoutonON-OFF.gif"; $imageled2 = "bouton/BoutonON.gif"; $imageled2M = "bouton/BoutonON-OFF.gif"; $imageled3 = "bouton/BoutonON.gif"; $imageled3M = "bouton/BoutonON-OFF.gif"; $onoff1="ON"; $onoff2="ON"; $onoff3="ON"; } // Check of LED1 is set. If it is use it if (isset($_POST["LED1"])) { $LED1= $_POST["LED1"]; $onoff2= $_POST["posled2"]; if ($onoff2 == "ON"){ $imageled2 = "bouton/BoutonON.gif"; $imageled2M = "bouton/BoutonON-OFF.gif"; } else{ $imageled2 = "bouton/BoutonOFF.gif"; $imageled2M = "bouton/BoutonOFF-ON.gif"; } $onoff3= $_POST["posled3"]; if ($onoff3 == "ON"){ $imageled3 = "bouton/BoutonON.gif"; $imageled3M = "bouton/BoutonON-OFF.gif"; } else{ $imageled3 = "bouton/BoutonOFF.gif"; $imageled3M = "bouton/BoutonOFF-ON.gif"; } } else{ $LED1=""; } // Check of LED2 is set. If it is use it if (isset($_POST["LED2"])) { $LED2= $_POST["LED2"]; $onoff1= $_POST["posled1"]; if ($onoff1 == "ON"){ $imageled1 = "bouton/BoutonON.gif"; $imageled1M = "bouton/BoutonON-OFF.gif"; } else{ $imageled1 = "bouton/BoutonOFF.gif"; $imageled1M = "bouton/BoutonOFF-ON.gif"; } $onoff3= $_POST["posled3"]; if ($onoff3 == "ON"){ $imageled3 = "bouton/BoutonON.gif"; $imageled3M = "bouton/BoutonON-OFF.gif"; } else{ $imageled3 = "bouton/BoutonOFF.gif"; $imageled3M = "bouton/BoutonOFF-ON.gif"; } } else{ $LED2=""; } // Check of LED3 is set. If it is use it if (isset($_POST["LED3"])) { $LED3= $_POST["LED3"]; $onoff2= $_POST["posled2"]; if ($onoff2 == "ON"){ $imageled2 = "bouton/BoutonON.gif"; $imageled2M = "bouton/BoutonON-OFF.gif"; } else{ $imageled2 = "bouton/BoutonOFF.gif"; $imageled2M = "bouton/BoutonOFF-ON.gif"; } $onoff1= $_POST["posled1"]; if ($onoff1 == "ON"){ $imageled1 = "bouton/BoutonON.gif"; $imageled1M = "bouton/BoutonON-OFF.gif"; } else{ $imageled1 = "bouton/BoutonOFF.gif"; $imageled1M = "bouton/BoutonOFF-ON.gif"; } } else{ $LED3=""; } if ($LED1 == "ON") { $h = @fopen("http://ip shield/?LED1=ON", "rb"); $imageled1 = "bouton/BoutonOFF.gif"; $imageled1M = "bouton/BoutonOFF-ON.gif"; $onoff1="OFF"; } else if ($LED1 == "OFF") { $h= @fopen("http://shield/?LED1=OFF", "rb"); $imageled1 = "bouton/BoutonON.gif"; $imageled1M = "bouton/BoutonON-OFF.gif"; $onoff1="ON"; } if ($LED2 == "ON") { $h = fopen("http://shield/?LED2=ON", "rb"); $imageled2 = "bouton/BoutonOFF.gif"; $imageled2M = "bouton/BoutonOFF-ON.gif"; $onoff2="OFF"; } else if ($LED2 == "OFF") { $h= fopen("http://shield/?LED2=OFF", "rb"); $imageled2 = "bouton/BoutonON.gif"; $imageled2M = "bouton/BoutonON-OFF.gif"; $onoff2="ON"; } if ($LED3 == "ON") { $h = fopen("http://shield/?LED3=ON", "rb"); $imageled3 = "bouton/BoutonOFF.gif"; $imageled3M = "bouton/BoutonOFF-ON.gif"; $onoff3="OFF"; } else if ($LED3 == "OFF") { $h= fopen("http://shield/?LED3=OFF", "rb"); $imageled3 = "bouton/BoutonON.gif"; $imageled3M = "bouton/BoutonON-OFF.gif"; $onoff3="ON"; } ?>

<!-- Start of the HTML -->
<html>
<head>


<br />
<style type="text/css">

body{
background-color : rgba(0, 0, 0, 1);
width : 100%;
height : 100%;
}

input:focus {
outline : none;
}

</style>
<p>

<title>Commande prise 433Mhz</title>
</head>
<body >
<center>

<br />
<table border="0" align="center" style="margin:20px">

<br />
<tr align="center" >

<td><font size="4" color="#ffffff">Prise N° 1</font></H4>
<p>
</td>
<p>

<td><font size="4" color="#ffffff">Prise N° 2</font></H4>
<p>
</td>
<p>

<td><font size="4" color="#ffffff">Prise N° 3</font></H4>
<p>
</td>
<p>

</tr>
<p>

<br />
<tr align="center">

<br />
<td style="padding:20px" >

<br />
<form action="ledimage.php" method="post" name="led1">
<input type="hidden" name="LED1" value="<?php echo $onoff1?>">
<input type="hidden" name="posled2" value="<?php echo $onoff2?>">
<input type="hidden" name="posled3" value="<?php echo $onoff3?>">
<input type="image" name="submit" value="ON" onClick="led1.submit()"
onmouseover="src='<?php echo $imageled1M ?>'"
onmouseout="src='<?php echo $imageled1 ?>'"
src="<?php echo $imageled1 ?>">
</form>
<p>

</td>
<p>

<br />
<td style="padding:20px" >

<br />
<form action="ledimage.php" method="post" name="led2">
<input type="hidden" name="LED2" value="<?php echo $onoff2?>">
<input type="hidden" name="posled1" value="<?php echo $onoff1?>">
<input type="hidden" name="posled3" value="<?php echo $onoff3?>">
<input type="image" name="submit" value="ON" onClick="led2.submit()"
onmouseover="src='<?php echo $imageled2M ?>'"
onmouseout="src='<?php echo $imageled2 ?>'"
src='<?php echo $imageled2 ?>'>
</form>
<p>

</td>
<p>

<br />
<td style="padding:20px" >

<br />
<form action="ledimage.php" method="post" name="led3">
<input type="hidden" name="LED3" value="<?php echo $onoff3?>">
<input type="hidden" name="posled1" value="<?php echo $onoff1?>">
<input type="hidden" name="posled2" value="<?php echo $onoff2?>">
<input type="image" name="submit" value="ON" onClick="led3.submit()"
onmouseover="src='<?php echo $imageled3M ?>'"
onmouseout="src='<?php echo $imageled3 ?>'"
src='<?php echo $imageled3 ?>'>
</form>
<p>

</td>
<p>

</tr>
<p>

</table>
<p>

</center>
</body>
</html>

La plus grosse difficultée  de ce code était de garder la position des bouton quand on change une prise. Il faut garder la valeur des boutons non changés.

Si vous voulez les images des différents boutons faite moi un message.