Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- #include <Ethernet.h>
- //MAC adresa Arduina
- byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
- char server[] = "www.spseke.sk"; // adresa webového servera (napríklad www.spseke.sk)
- // IP konfigurácia pre Arduino v prípade, že sa nepodarí načítať ju cez DHCP
- IPAddress ip(192, 168, 0, 177);
- IPAddress gw(192,168 , 1, 1);
- IPAddress dnserver(8, 8, 8, 8);
- IPAddress sm(255, 255, 255, 0);
- // Inicializácia webového klienta
- EthernetClient client;
- void setup() {
- Serial.begin(9600);
- // ak sa nepodarí načítať IP adresu cez DHCP
- if (Ethernet.begin(mac) == 0) {
- Serial.println("Nepodarilo sa načítať adresu cez DHCP"); //výpis chybovej hlášky na serial monitor
- Ethernet.begin(mac, ip, dnserver, gw, sm); //nastavenie statických parametrov do shieldu
- }
- delay(1000);
- Serial.println("connecting...");
- String data="teplota=23&dvere1=otv&okno2=zat"; //data posielane cez GET request
- String pswd="jablko"; // heslo pre šifrovanie
- String mPswd=""; //premenná, v ktorej bude za sebou nakopírované heslo tak, aby malo rovnakú dĺžku ako GET data
- for(int i=0;i<data.length();i++){ //cyklus, ktorý sa vykoná toľkokrát, koľko je dĺžka dát
- mPswd += pswd.charAt(i%pswd.length()); //zakaždým vezmem znak z reťazca pswd a pridám ho do reťazca mPswd, pričom ak presiahnem dĺžku pswd, tak ju "pretočím" nanovo od začiatku cez modulo
- }
- //debug výpisy, aby sme videli dĺžku
- Serial.print("data = ");
- Serial.println(data);
- Serial.print("pswd = ");
- Serial.println(mPswd);
- // netlačiteľné znaky v URL sa nahrádzajú trojicou znakov %HH, kde HH je hexadecimálny kód znaku, preto každý jeden zašifrovaný znak nahradíme touto trojicou
- String secret=""; //premenná, v ktorej budem udržiavať tajnú správu
- for(int i=0;i<data.length();i++){ //cyklus, ktorý prejde celý reťazec data
- secret += "%"; //prvý znak z trojice %HH
- char c = data.charAt(i)^mPswd.charAt(i); //zašifrujem dátový reťazec XOR šifrou, pričom operácia XOR sa v C značí ako ^
- if(c<16) //ak by hrozilo, že zašifrovaný znak bude len jedno hexa písmeno (teda 0-F tj. 0-15)
- secret += "0"; //pridáme ešte pred tento jeden znak nulu, pretože v URL musí byť zašifrovaný takýto znak ako trojica %HH
- secret += String(c,HEX); //nakoniec pridáme hexa vyjadrenie zašifrovaného znaku
- }
- Serial.print("secret = ");
- Serial.print(secret);
- // spojenie na server
- if (client.connect(server, 80)) {
- Serial.println("connected");
- // Make a HTTP request:
- client.print("GET /uloz.php?data=");
- client.print(secret); //posleme na server zašifrované dáta
- client.println(" HTTP/1.1");
- client.println("Host: www.spseke.sk");
- client.println("Connection: close");
- client.println();
- } else {
- // výpis chybovej hlášky v prípade neúspešného spojenia na server
- Serial.println("connection failed");
- }
- }
- void loop() {
- // výpis odpovede zo servera
- if (client.available()) {
- char c = client.read();
- Serial.print(c);
- }
- if (!client.connected()) {
- Serial.println();
- Serial.println("disconnecting.");
- client.stop();
- // "zastavenie" arduina
- while (true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment