Superenkel dashboarding direkt på linkit en (1 / 2 steg)

Steg 1: En sida om misslyckande

Här är några saker jag provat... som inte fungerade. Detta är kanin hål som jag kom in och nästan fick mig att ge upp.

-Först försökte jag ladda alla fribord js sidor och alla dess beroenden normalt och bara mata dem direkt till klienten genom att återanvända wifiwebserver och kod från en välkänd arduino forummedlem, zoomkat. Detta ledde mig att komma med något liknande vad du ser här:

/ * Skriven för Linkit en
* En webserver som ser till index.html inne om rotfästa dir av onboard lagring
* och serverar den sidan...
* Jag använder detta för att testa hosting fribord för några projekt
* Tack till användaren zoomkat på arduino forum,
* och WifiWebServer och lagring exempelkod från linkit ett team
*/
#include < LTask.h >
#include < LWifi.h >
#include < LWifiClient.h >
#include < LWifiServer.h >
#include < LFlash.h >
#include < LSD.h >
#include < LStorage.h >
#define WIFI_AP "blah"
#define WIFI_PASSWORD "blah"
#define WIFI_AUTH LWIFI_WPA
#define Drv Kraaalj
LWiFiServer server(80);
Sträng readString, pos;
void setup() {

pinMode (10, OUTPUT);
Drv.BEGIN();
LWiFi.begin();
Serial.BEGIN(115200);
hålla försöker igen tills ansluten till AP
Serial.println ("ansluter till AP");
medan (0 == LWiFi.connect (WIFI_AP, LWiFiLoginInfo (WIFI_AUTH, WIFI_PASSWORD)))
{
Delay(1000);
}
printWifiStatus();
Serial.println ("starta Server");
Server.BEGIN();
Serial.println ("Server började");
}
int loopCount = 0;
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
Delay(500);
loopCount ++;
LWiFiClient klient = server.available();
om (klient)
{
Serial.println ("ny kund");
en http-förfrågan avslutas med en tom rad
booleska currentLineIsBlank = sant;
samtidigt (client.connected()) {
om (client.available()) {
Vi i princip ignorerar klientbegäran, men vänta HTTP begäran slutet
char c = client.read();
Läs röding av char HTTP-begäran
om (readString.length() < 100) {
lagra tecken till sträng
readString += c;
Serial.Print(c);
}
om HTTP-begäran har avslutats
om (c == "\n") {
Serial.println("ReadString");
Serial.println(readString);
om (readString.indexOf("freeboard") > = 0) {
client.println ("HTTP/1.1 200 OK"); Skicka ny sida
client.println ("Content-Type: text/html");
client.println();
LFile MinFil = Drv.open("index.html");
om (MinFil) {
samtidigt (myFile.available()) {
client.write(myfile.Read());
}
myFile.close();
}
}

annat {
om filen finns Fortsätt
Sträng filepath = readString.substring ((readString.indexOf("GET")+5),(readString.indexOf("HTTP")));
char fullpath [1024];
filepath.toCharArray(fullpath,1024);
Serial.println(filepath);
Sträng förlängning = filepath.substring (filepath.lastIndexOf("."));
Serial.println(Extension);
om (sant) {
Serial.println ("Skicka svar");
Skicka ett standard http-svarshuvud
client.println ("HTTP/1.1 200 OK");
om ((extension.indexOf("html") > = 0) || (extension.indexOf("htm") > = 0)) {
client.println ("Content-Type: text/html");
}

om (extension.indexOf("css") > = 0) {
client.println ("Content-Type: text/css");
}

om (extension.indexOf("js") > = 0) {
client.println ("Content-Type: application/javascript");
}

om (extension.indexOf("map") > = 0) {
client.println ("Content-Type: application/x-navimap");
}

om (extension.indexOf("png") > = 0) {
client.println ("Content-Type: image/png");
}

client.println();
LFile MinFil = Drv.open(fullpath);
om (MinFil) {
samtidigt (myFile.available()) {
client.write(myfile.Read());
}
myFile.close();
}
}
om filen inte finns borgen med 404
annat {
client.println ("HTTP/1.1 404");
client.println ("innehåll-Tyep: text/html");
client.println();
client.println ("404-filen hittades inte");
}
}
Delay(100);

stänga anslutningen:
Serial.println ("nära samband");
client.stop();
}
}
}
}
}
void printWifiStatus()
{
skriva ut SSID för nätverket du är ansluten till:
Serial.Print ("SSID:");
Serial.println(LWiFi.SSID());
skriva ut din WiFi shield's IP-adress:
IP-adress ip = LWiFi.localIP();
Serial.Print ("IP-adress:");
Serial.println(IP);
Serial.Print ("nätmask:");
Serial.println(LWiFi.subnetMask());
Serial.Print ("gateway IP:");
Serial.println(LWiFi.gatewayIP());
skriva ut mottagna signalstyrka:
långa rssi = LWiFi.RSSI();
Serial.Print ("signalstyrka (RSSI):");
Serial.Print(RSSI);
Serial.println ("dBm");
}
För nu kommer vi fokusera på denna del:
om (MinFil) {
samtidigt (myFile.available()) {
client.write(myfile.Read());
}
myFile.close();
}
}

Vad som händer här är att som filen stream kommer bort av minnesutrymme på linkit en det får placeras i en stream buffert i RAM och sedan från denna buffert dumpad i utgående nätverk stack köerna. Detta presenterar två frågor:
Den första bufferten är faktiskt ganska liten och läsa en fil från ROM är inte särskilt snabb. Så, vad du sluta med är mycket långsamma lastning sidor. Ibland de tiden ut eller göra andra konstiga saker. Jag wiresharked (https://www.wireshark.org/) anslutningen och det ser ut som det bara spottar ut små paket av omkring 50 byte (senare började det meningsfullt för mig som det buffert som används när läsa filer i är förmodligen om att storleken). Fribord har faktiskt ett gäng av beroenden som behövs för att ladda. Några av dessa göra samtidiga saker och ladda dynamiskt saker. Detta fungerar inte i en enkel linjär program. Det finns nog sätt att göra detta arbete på en arduino men inte lätt (en början skulle vara att titta här: https://learn.adafruit.com/multi-tasking-the-ardu... .

Jag försökte med olika metoder att läsa filen i och att se till att bufferten var nästan full innan du skickar mer data till klienten. men fick inte särskilt långt. Jag försökte också readUntil och dess varianter. Ingen av dessa gjorde susen

Några blandade länkar jag läst under denna kanin hål utforskning:

http://forum.Arduino.cc/index.php?topic=279849.msg...

http://Playground.Arduino.cc/Code/WebServerST

http://forum.Arduino.cc/index.php?topic=279849.msg...

https://www.Arduino.cc/en/reference/StreamReadStr...

Slutligen jag sönder och såg för något mycket lätt att uppfylla min önskan om en grafisk representation av data tillsammans med json exponeringen av data. Vad jag kom med rellies på html 5 "meter" eller "progress" element. Dessa är i huvudsak små diagram som renderar utan extern JS innehåller eller heavyweight styling. Detta är nakna ben.

Sid-koden jag kom med såg ut ungefär så här (och lästes av något liknande till listningen ovan men med ett tillägg att presentera de batteri avläsningarna som json på /bat):

<! DOCTYPE html >
< html >
< body >
< h3 > enkel Sensor mäter Demo < /p >
< p > batteri (med mätaren element): < mätaren id = "bat" min = "0" max = "100" value = "0" >< / meter >< /p >
< p > batteri (med framsteg element): < framsteg-id = "batp" max = "100" value = "0" >< / meter >< /p >
< p > laddning: < h3-id = "laddning" >< / h3 >< /p >
< script >
funktion Get(yourUrl) {
var Httpreq = ny XMLHttpRequest(); en ny begäran
Httpreq.Open("get",yourUrl,false);
Httpreq.send();
återvända Httpreq.responseText;
}
funktion updateMeters() {
var jsonBat = JSON.parse(Get("/bat"));
window.Alert(jsonBat);
document.getElementById("bat").value = jsonBat.batteryLevel;
document.getElementById("batp").value = jasonBat.batteryLevel;
document.getElementById("charging").innerHTML = jsonBat.chargingStatus;
}
updateMeters();
setInterval(updateMeters,5000);
< / script >
< / body >
< / html >

Dock sprang jag in i en annan fråga med min kod...
Om jag skulle läsa in skulle en HTML-sida och HTML-sidan försöka göra en HTTP GET på något på linkit en därefter ingenting skulle hända. Jag blev förvirrad tills jag räknat ut. Koden var enda gängade och blockerar. Så, var det att vänta tills den första sidan gjordes lastning ladda nästa sida. Detta hänt aldrig och så den fastnade.

Se Steg
Relaterade Ämnen

LinkIt en DHT11 Webserver

Uppdatering 7 nov, 2015 7:35 CST: redigera i skiss - ökad följetong till 115200 verkar mer stabil vid uppdateringStälla in en webbsida du kan komma åt överallt att se ditt hem temperatur är en mycket bekväm service, kan du ge för dig utan extra kostn...

LinkIt en Tutorials - #3 tala med extern enhet

Jag hoppas att du följt mina tidigare två LinkIt en tutorials och allt fungerade bra.För den här läraren kommer vi att ansluta en extern enhet (i detta fall en LED (Light Emitting Diode)) till LinkIt en styrelsen.Detta kommer att Visa styra externa e...

Linkit en: Flame Sensor

detta instructable vägleder dig att använda en flamma sensor med Mediatek Linkit ONE. En flamma sensor är en enhet som kan upptäcka förekomsten av brand i närheten.En Summer ansluten till linkit en piper när branden upptäcks av sensorn.Så låt oss kom...

Köra Linker RTC på pcDuino

Linker RTC är ett slags realtid klocka modul utifrån DS1307. DS1307 är en låg strömförbrukning,med 56 bytes icke förlora full BCD kod klocka kalender realtidsklocka, är adress och dataöverförs via två line dubbelriktad seriell buss, chip kan leverera...

Stalker Guard

tack för att läsa min Instructable. Jag heter Aditya och jag bor i up, Indien. Varje dag får vi höra några stöldeller brott i vårt grannskap. Så jag bestämde mig att göra en anordning för att lösa vissa problem. Som kedja rycka, Bus med flickor etc....

Närvaro anmälaren med tryckknapp

Dessa dagar i familjer, har både män och kvinnor börjat jobba. Både män och kvinnor vill lyckas i livet och för detta de måste arbeta hårt och tillbringade mer tid i kontor. Och med detta blir det svårt för dem att se efter sina barn båda. På grund a...

Gör en TumblyBOT: vända Spinning tumlande Robot

De flesta små robotar är två motorer och en castor hjul.Jag ville designa en robot med en unik enhet.Presentera TumblyBOT. TumblyBOT flyttar i en cool sätt som är intressant att titta på.Kontrolleras av en telefon rörelse, kan du göra din TumblyBOT r...

WiFi kontrollerad RGB LED Strip

De IR-fjärrkontroller som används för att styra RGB LED strips kan ibland bli irriterande på grund av deras begränsade räckvidd och jakt på fjärrkontrollen när du inte hittar den. Detta enkla, men effektiva projekt kan lösa ett problem genom att kont...

Linkit en - Webserver Dashboard & Webcam

Koppla in GPS och WiFi antenner och batteri!Grove seriell kameran är valfritt.http://www.seeedstudio.com/Depot/Grove-Serial-came...Steg 1: Kompilera och DashboardInstallera min bibliotek omslag!https://github.com/swampyness/wrappers_linkitKopiera och...

Intellekten IoT Analytics Dashboard

Detta Instructable ger information om hur man upprättar ett Intel Analytics Dashboard konto, Anslut en enhet till molnet, kontroll en enhet genom molnet, och köra Arduino program som kommunicerar med molnet.De flesta stegen i detta Instructable är ba...

Linkit en - Live data övervakas i Excel och visas med hjälp av en instrumentpanel

Det finns många sätt att samla in data från prototyper plattformar som Linkit en varav många måste du betala för. Förmodligen är det enklaste att använda Excel för din samling och manipulation.Till exempel:Använd den seriella porten och väderkvarn ht...

Använda Cortana att styra din LinkIt en!

IntroduktionDet finns ny teknik runt omkring oss och bara fler kommer varje dag. Vår micro styrenheter blir snabbare, är telefoner blir smartare och molnet blir starkare. Med all denna nya teknik alla frågar sig: Hur kan jag utnyttja det hela?Tja, ko...

En enkel hydroponiska System med MediaTek LinkIt™ en

Idag vill vi beskriva ett projekt baserat på den nya styrelsen Mediatek Linkit en. Vi vill med denna styrelse inser en enkel hydroponiska system som kan:1) att göra hydroponics näringslösning:Detta kommer att göras med hjälp av magnetventiler aktiver...

Alkohol detektering med Linkit en

En Alkoholmätare är en enhet för skattning av blodalkoholhalten (BAC) från ett utandningsprov. Bevisinstrument mäta inte direkt blodalkoholkoncentration eller koncentration, vilket kräver en analys av ett blodprov. Istället, de uppskattar BAC indirek...

Batteri och kraft för en Linkit

Power är en mycket viktig aspekt av en mikrokontroller när dess förväntade vara anslutna 24 timmar att sakernas Internet.Styrelsen det själv kommer med en ackumulatorn. Men i detta instructable jag kommer att diskutera makt krav, sätt att kraften i s...

Färg detektering med TCS3200 färg Sensor och LinkIt en stiger ombord

I detta Instructable lär vi hur gränssnittet TCS3200 färg sensor med LinkIt en för färg upptäckt.De TCS3200 programmerbara färg ljus-till-frekvensomformare som kombinerar konfigurerbara kisel fotodioder och ett ström-till-frekvens converter på en end...

Berömda LM35 med Mediatek Linkit en styrelse

I detta Instructable kommer du att kunna gränssnitt berömda Lm35 med Mediatek LinkitOne styrelse.LM35 serien är precision integrerade kretsar1• kalibrerad direkt i Celsius (Celsius) temperatur enheter med en output voltage linjärt-• linjära + 10-mV /...

D-Link trådlös Router DIR-628 installation [utan CD]

de flesta, om inte alla, trådlösa routrar kan sättas upp utan de kommer med-programmet. Här är de steg för steg instruktionerna för de flesta D-Link trådlösa routrar, men mer specifikt DIR-628.Steg 1: Förberedelser för installation Förutsatt att du j...

Link svärd, balja, sköld och slingshot

Huvudpersonen i Nintendo Legend of Zelda spelen är länken, som är en svärd-viftande korsning mellan Legolas och Indiana Jones. Han springer i en diskett hatt lösa pussel och avsändning skurkarna när han försökte rädda den eponymous prinsessan. Mina s...