Zápisník experimentátora
Ku napísaniu tohoto článku ma inšpirovala otázka na Google+
fóre. Ako dostať meno a heslo (napríklad ku WiFi) do Arduina tak, aby to nebolo nutné zapísať priamo do programu. Tak totiž hrozí nebezpečenstvo, že z neopatrnosti pošlete svoje heslo napríklad na GitHub.
Ukážem to na praktickom príklade. Skoro každý príklad pre WiFi sa začína riadkami.
#include <WiFi101.h>
char ssid[] = "yourNetwork"; // your network SSID (name)
char pass[] = "secretPassword"; // your network password (use for WPA, or use as key for WEP)
Takže zoberiete príklad, zmeníte v ňom svoje údaje, vyskúšate program a pretože chcete mať vo všetkom poriadok a robíte si dokumentáciu, nechtiac pošlete svoj výtvor na GitHub, alebo ho uverejníte na svojom blogu, alebo urobíte printscreen obrazovky a obrázok kdesi zverejníte. A o pár minút si uvedomíte, že ste svoje privátne údaje práve zverejnili na Internete. A máte problém a je len na vás, ako ho vyriešite. Ale nie je to jednoduché a nikto tento pocit nechce zažiť. Takže ako na to, aby sa to v budúcnosti nestalo?
V každom kompilátore je možné pridať definície parametrov, ktoré sa do programu prenesú ako makrá. Problém je len v tom, ako tieto parametre dostať do kompilátora z Arduino IDE. Nie je to síce možné naklikať priamo v IDE, ale cesta tu je. Tvorcovia Arduina umožnili doplniť si extra parametre do prekladu a tieto extra parametre nám veľmi dobre poslúžia na vyriešenie popísaného problému.
Postup je rovnaký pre ľubovoľné Arduino. Vždy musíte vytvoriť súbor platform.local.txt
a do neho zapísať požadované parametre v syntaxi prekladača. Našťastie to majú všetky C++ kompilátory rovnaké.
Ja mám napríklad Arduino nainštalované v adresári d:/arduino/arduino-1.8.2/
. Preto sa súbor platform.txt
nachádza na ceste d:/arduino/arduino-1.8.2/hardware/arduino/avr/platform.txt
. Vytvorím súbor d:/arduino/arduino-1.8.2/hardware/arduino/avr/platform.local.txt
s týmto obsahom.
compiler.cpp.extra_flags=-DEXTRA_PARAMETER="abc123"
Po kompilácii programu arduino_extra_parameter.ino
sa na sériový port vypíšu dve hodnoty. Ak súbor neexistuje, alebo som nedodržal predpísaný postup, zobrazí sa chybové hlásenie EXTRA_PARAMETER not found!
.
#if defined(EXTRA_PARAMETER)
#define DEPENDENT_PARAMETER "xyz"
#else
#error EXTRA_PARAMETER not found!
#endif
void setup() {
Serial.begin(9600);
Serial.println(EXTRA_PARAMETER);
Serial.println(DEPENDENT_PARAMETER);
}
void loop() {
// nothing
}
Arduino MKR1000 sa vie pripojiť na Internet a tak preň môžeme napísať príklad s menom a heslom. Predchádzajúci program v drobnej úprave mkr1000_extra_parameter.ino
bude fungovať tiež, pokiaľ nájdete ten správny adresár. V mojom prípade to je adresár c:\Users\Robo\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.15\
, kam môžete prekopírovať ten istý súbor.
Zameriame sa ale na prenesenie mena a hesla k WiFi. Na to budeme potrebovať nastaviť obsah súboru platform.local.txt
na
compiler.cpp.extra_flags=-D_SSID="xxx" -D_PWD="xxx"
A v programe si nastavíte meno a heslo k WiFi takto. Ukážka je skrátená, celý program mkr1000_web_client.ino
nájdete na serveri GitHub.
#include <WiFi101.h>
#if defined(_SSID)
char ssid[] = _SSID; // your network SSID (name)
char pass[] = _PWD; // your network password (use for WPA, or use as key for WEP)
#else
char ssid[] = "xxx"; // your network SSID (name)
char pass[] = "xxx"; // your network password (use for WPA, or use as key for WEP)
#endif
ESP8266 sa vie pripojiť na Internet a tak preň môžeme napísať príklad s menom a heslom. Predchádzajúci program v drobnej úprave esp8266_extra_parameter.ino
bude fungovať tiež, pokiaľ nájdete ten správny adresár. V mojom prípade to je adresár c:\Users\Robo\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\
, kam môžete prekopírovať ten istý súbor.
Zameriame sa ale na prenesenie mena a hesla k WiFi. Na to budeme potrebovať nastaviť obsah súboru platform.local.txt
na
compiler.cpp.extra_flags=-D_SSID="xxx" -D_PWD="xxx"
A v programe si nastavíte meno a heslo k WiFi takto. Ukážka je skrátená, celý program esp8266_web_client.ino
nájdete na serveri GitHub.
#include <ESP8266WiFi.h>
#if defined(_SSID)
const char* ssid = _SSID;
const char* password = _PWD;
#else
const char* ssid = "your-ssid";
const char* password = "your-password";
#endif
Všetky príklady nájdete na serveri GitHub.
13.06.2017