Super eenvoudig dashboarding rechtstreeks op het linkit een (1 / 2 stap)

Stap 1: Een pagina over falen

Hier zijn enkele dingen die ik geprobeerd... dat niet werkte. Dit zijn de gaten konijn dat ik stapte in en bijna leidde me te geven.

-Ten eerste heb ik geprobeerd om te laden alle pagina's js Vrijboord en alle bijbehorende afhankelijkheden normaal en gewoon voer ze rechtstreeks naar de client door het hergebruik van wifiwebserver en code uit een bekende arduino forumlid, zoomkat. Dit leidde me om te komen met iets wat je hier ziet:

 /* Written for the Linkit One * A webserver that looks for index.html in the root dir of the onboard storage * and serves that page... * I am using this to test hosting freeboard for a few projects * Thanks to the user zoomkat on the arduino forums, * and the WifiWebServer and Storage example code from the linkit one 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 LFlash LWiFiServer server(80);String readString, pos;void setup() { pinMode(10, OUTPUT); Drv.begin(); LWiFi.begin(); Serial.begin(115200); // keep retrying until connected to AP Serial.println("Connecting to AP"); while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) { delay(1000); } printWifiStatus(); Serial.println("Start Server"); server.begin(); Serial.println("Server Started"); }int loopCount = 0;void loop() { // put your main code here, to run repeatedly: delay(500); loopCount++; LWiFiClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()){ if (client.available()){ // we basically ignores client request, but wait for HTTP request end char c = client.read(); //read char by char HTTP request if (readString.length() < 100) { //store characters to string readString += c; Serial.print(c); } //if HTTP request has ended if (c == '\n'){ Serial.println("readstring"); Serial.println(readString); if (readString.indexOf("freeboard") >=0){ client.println("HTTP/1.1 200 OK"); //send new page client.println("Content-Type: text/html"); client.println(); LFile myFile = Drv.open("index.html"); if (myFile) { while (myFile.available()) { client.write(myFile.read()); } myFile.close(); } } else { //if the file exists continue String filepath = readString.substring( (readString.indexOf("GET")+5),(readString.indexOf("HTTP")) ); char fullpath[1024]; filepath.toCharArray(fullpath,1024); Serial.println(filepath); String extension = filepath.substring( filepath.lastIndexOf(".") ); Serial.println(extension); if (true){ Serial.println("send response"); // send a standard http response header client.println("HTTP/1.1 200 OK"); if ((extension.indexOf("html") >=0) || (extension.indexOf("htm") >= 0) ){ client.println("Content-Type: text/html"); } if (extension.indexOf("css") >=0){ client.println("Content-Type: text/css"); } if (extension.indexOf("js") >=0){ client.println("Content-Type: application/javascript"); } if (extension.indexOf("map") >=0){ client.println("Content-Type: application/x-navimap"); } if (extension.indexOf("png") >=0){ client.println("Content-Type: image/png"); } client.println(); LFile myFile = Drv.open(fullpath); if (myFile) { while (myFile.available()) { client.write(myFile.read()); } myFile.close(); } } //if the file doesn't exist bail with 404 else{ client.println("HTTP/1.1 404"); client.println("Content-Tyep: text/html"); client.println(); client.println("404 file not found"); } } delay(100); // close the connection: Serial.println("close connection"); client.stop(); } } } }}void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(LWiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = LWiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); Serial.print("subnet mask: "); Serial.println(LWiFi.subnetMask()); Serial.print("gateway IP: "); Serial.println(LWiFi.gatewayIP()); // print the received signal strength: long rssi = LWiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); } For now we will focus on this part: if (myFile) { while (myFile.available()) { client.write(myFile.read()); } myFile.close(); } } 

Wat hier gebeurt is dat als het bestand stream komt af van de geheugenruimte op de linkit een die het wordt gezet in een stream buffer in het RAM en vervolgens van die buffer gedumpt in de uitgaande wachtrijen van de netwerk stack. Dit stelt twee problemen:
Dat eerste buffer is eigenlijk vrij klein en het lezen van een bestand vanaf de ROM is niet bijzonder snel. Dus, wat je eindigen met zijn zeer langzame laden pagina's. Soms zijn ze een time-out of andere rare dingen doen. Ik wiresharked (https://www.wireshark.org/) de verbinding en het lijkt erop dat het alleen spuugt kleine pakketten van ongeveer 50 bytes (later begon dit zinvol voor mij als de buffer die wordt gebruikt wanneer het lezen van bestanden in waarschijnlijk ongeveer die grootte is). Vrijboord heeft eigenlijk een heleboel afhankelijkheden die het nodig heeft om te laden. Sommige van deze gelijktijdige dingen doen en dynamisch laden van spullen. Dit werkt niet in een eenvoudige lineaire programma. Waarschijnlijk zijn er manieren om dit werk op een arduino, maar niet gemakkelijk (een begin zou moeten kijk hier: https://learn.adafruit.com/multi-tasking-the-ardu... .

Ik probeerde met behulp van verschillende methoden van het lezen van het bestand in en ervoor te zorgen dat de buffer was bijna vol voordat meer gegevens worden verzonden naar de client. maar niet heel ver komen. Ik heb het ook geprobeerd met readUntil en haar varianten. Geen van deze deed de truc

Sommige geassorteerde Verwijzigingen doorgebladerd ik tijdens deze konijn gat verkenning:

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...

Tot slot ik brak en zocht iets heel licht om te voldoen aan mijn verlangen naar een grafische weergave van gegevens samen met de json-blootstelling van de gegevens. Wat ik kwam met rellies op de HTML-5 "meter" en/of "progress" elementen. Dit zijn hoofdzakelijk kleine bar grafieken maken zonder externe JS pagina bevat of zwaargewicht styling. Dit zijn de kale botten.

De paginacode die ik kwam met iets dergelijks keek (en werd gelezen door iets dergelijks de vermelding hierboven, maar met een toevoeging aan de batterij lezingen presenteren als json op /bat):

 <!DOCTYPE html><html> <body> <h3>Simple Sensor Meters Demo</p> <p>battery(using meter element): <meter id="bat" min="0" max="100" value="0"></meter></p> <p>battery(using progress element): <progress id="batp" max="100" value="0"></meter></p> <p>charging: <h3 id="charging"></h3></p> <script>function Get(yourUrl){ var Httpreq = new XMLHttpRequest(); // a new request Httpreq.open("GET",yourUrl,false); Httpreq.send(); return Httpreq.responseText; } function 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> 

Ik kwam echter in een ander probleem met mijn code...
Als ik moest laden zou een HTML-pagina en die html-pagina proberen te doen een HTTP GET op iets op het linkit men dan niets zou gebeuren. Ik was verbaasd, totdat mij postuur op uiterlijk. De code was één schroefdraad en blokkeren. Dus, het was te wachten tot de beginpagina gebeurde laden de volgende pagina te laden. Dit nooit gebeurd, en dus het bleef steken.

Gerelateerde Artikelen

Een eenvoudige hydrocultuur systeem met MediaTek LinkIt™ een

Een eenvoudige hydrocultuur systeem met MediaTek LinkIt™ een

Vandaag willen we een project op basis van het nieuwe bestuur Mediatek Linkit één beschrijven. Met dit board willen we een eenvoudig hydrocultuur systeem die kan realiseren:1) het maken van hydrocultuur voedingsstof oplossing:Dit zal worden gemaakt m
Super eenvoudige laptop hack voor het maken van uw aandrijving CD/DVD gemakkelijker te openen.

Super eenvoudige laptop hack voor het maken van uw aandrijving CD/DVD gemakkelijker te openen.

OK, dus dit is niet precies een probleem dat pest man sinds de dageraad van tijd heeft, maar het is iets dat stoort me over laptop CD/DVD-stations die is zo eenvoudig op te lossen.Hier is het probleem, te openen van de CD/DVD-station op de meeste lap
Controle LED's op het LinkIt een bord

Controle LED's op het LinkIt een bord

In deze Tutorial zullen we leren hoe LED's bepalen met een LinkIt één bordStap 1: CodeIk maakte een eenvoudige code om controle 3 LED's als weergegeven onder.Weet niet hoe om te uploaden schetsen naar de linkit één bestuur Klik hierHier is de code **
Hoe maak je een super eenvoudige telefoon/tablet staan

Hoe maak je een super eenvoudige telefoon/tablet staan

U ben moe van het kijken van een film, maar hebben te houden met je hand? Uw hand krijgen moe wanneer houdt de telefoon/Tablet PC te spelen spel wanneer u vaststelling? Wilt u zelf een super eenvoudige telefoon/tablet stand? Ik zal u tonen hoe te mak
Super eenvoudige Naan

Super eenvoudige Naan

Curry is heerlijk. Jij rijst is heerlijk met uw hoofdgerecht, maar wat als je moe bent van rijst?Neem een nota uit India en sommige super eenvoudig Naan maken. Naan is een yoghurt brood dat is zacht en licht zoete.Niet alleen is het eenvoudig, maar h
Super eenvoudig Inductor Joule dief!

Super eenvoudig Inductor Joule dief!

Hey iedereen! In dit Instructable zal ik u tonen hoe te maken je eigen eenvoudige spoel joule dief, in amper 10 minuten! Dit circuit is zo eenvoudig, zelfs die niet vertrouwd zijn met elektronica kunt uitproberen als hun eerste project!Wat is een die
LinKit een bewegingssensor

LinKit een bewegingssensor

In dit instructable ga ik u tonen hoe te maken van een motiesensor met behulp van een Linkit één en een bewegingssensor tilt. Dit project kan een deel van een beveiligingssysteem, als u nog niet gezien mijn eerdere instructables gelieve te controlere
Oplossen van problemen met de MediaTek LinkIt een bord

Oplossen van problemen met de MediaTek LinkIt een bord

Ik was super stoked te krijgen van mijn LinkIt een boord in de mail en volgde de verstrekte aanwijzingen om in te stellen. Maar toen ik probeerde om de board firmware-update, ik liep in een muur heeft een beetje van onderzoek langs te komen. Uiteinde
LinKit een BT - Mobile als PC Joystick

LinKit een BT - Mobile als PC Joystick

Spelen in de PC is altijd leuk. Spelen met joystick met uit toetsenbord is wat meer plezier. Geen vreugde houden nog steeds geen probleem u spelen met uw Android smart phone.Eerste denk ik dat het een zeer eenvoudig programma. Maar willen springen ve
Super eenvoudige strandtas

Super eenvoudige strandtas

* sommige naaien ervaring vereist * heb je ooit gevoeld de noodzaak om naar het strand te gaan, maar had geen strandtas je handdoek om in te zetten? Dat nooit meer zal gebeuren dankzij de Super eenvoudige strandtas! Ik heb dit een tijdje geleden, dus
Super makkelijke manier om de schil van een banaan!

Super makkelijke manier om de schil van een banaan!

Hier is een super eenvoudige manier om de schil van een banaanStap 1: Materialen die nodig zijn:U moet:Een banaanEen mesStap 2: Pick up banaan1. Houd de banaan in uw hand met de stengel naar bovenStap 3: Snijd een spleet in de stam van de banana peel
LinKit een kookwekker

LinKit een kookwekker

In dit instructable ik ga u tonen hoe het ontwerpen van een kookwekker met de Linkit One, de timer heeft een maximale duur van 30 minuten. En zodra de timer wordt gedaan het aftellen branden een zoemer om u te informeren. Het tijdsinterval instelbaar
LinKit een temperatuursensor

LinKit een temperatuursensor

In dit instructable I 'm gonna hoe u hoe meet je de temperatuur met behulp van een Linkit één en een Lm35 temperatuursensor. Dit project kan een deel van een monitor draadloos weer, als u nog niet gezien mijn eerdere instructables gelieve te controle
Super eenvoudige truc voor het opslaan van de overgebleven Turkije

Super eenvoudige truc voor het opslaan van de overgebleven Turkije

Oke, dus de vakanties voorbij zijn en je merkt dat je geconfronteerd met de klassiek dilemma van heerlijke vakantie overmaat: teveel Turkije. En misschien is er enige ham, misschien u een paar meer Brussel dan vorig jaar, en misschien grote Tante The