Innehållsförteckning:
- Förkunskaper
- Steg 1: Börja med en enkel webbserversskiss
- Steg 2: Skapa Remote JavaScript
- Steg 3: Ladda den externa JavaScript -filen i besökarens webbläsare
- Steg 4: Lägga till nya element på sidan
- Steg 5: Interaktiva element
- Steg 6: Svara på det interaktiva elementet
- Steg 7: Slutsats
Video: Ladda din Arduino/ESP Config -webbsida från molnet: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
När du skapar ett Arduino / ESP (ESP8266 / ESP32) -projekt kan du bara hårdkoda allt. Men oftare dyker det upp något och du kommer att ansluta din IoT-enhet till din IDE igen. Eller så har du precis fått fler att komma åt konfigurationen och du vill tillhandahålla ett användargränssnitt istället för att förvänta sig att de förstår det inre.
Denna instruerbara kommer att berätta hur du lägger det mesta av användargränssnittet i molnet istället för på Arduino / ESP. Om du gör det på det här sättet kommer du att spara utrymme och minnesanvändning. En tjänst som tillhandahåller gratis statiska webbsidor är särskilt lämplig som "moln", som GitHub Pages, men andra alternativ kommer förmodligen också att fungera.
För att bygga upp webbsidan på detta sätt krävs att användarens webbläsare går igenom fyra steg:
- Begär root -url från Arduino / ESP
- Få en mycket enkel webbsida som säger till:
- Begär en JavaScript -fil från molnet
- Ta emot koden som bygger upp den faktiska sidan
Denna instruktionsbok kommer också att förklara hur man interagerar med Arduino / ESP när sidan är klar enligt ovanstående steg.
Koden som skapats på denna instruerbara finns också på GitHub.
Förkunskaper
Denna instruerbara förutsätter att du har tillgång till visst material och vissa förkunskaper:
- En Arduino (med nätverksaccess) / ESP
- En dator att fästa ovanstående på
- WiFi -anslutning ansluten till internet
- Arduino IDE installerad (även för ESP32)
- Du vet hur du laddar upp en skiss till din IoT-enhet
- Du vet hur du använder Git & GitHub
Steg 1: Börja med en enkel webbserversskiss
Vi börjar så enkelt som möjligt och låter det växa härifrån.
#omfatta
const char* ssid = "yourssid"; const char* password = "yourpasswd"; WiFiServer -server (80); void setup () {// Initialize serial and wait for port to open: Serial.begin (115200); medan (! Seriell) {; // vänta på att seriell port ska anslutas. Behövs endast för inbyggd USB -port} WiFi.begin (ssid, lösenord); medan (WiFi.status ()! = WL_CONNECTED) {fördröjning (500); Serial.print ("."); } Serial.println ("WiFi -ansluten."); Serial.println ("IP -adress:"); Serial.println (WiFi.localIP ()); server.begin (); } void loop () {// lyssna efter inkommande klienter WiFiClient -klient = server.available (); // lyssna efter inkommande klienter bool sendResponse = false; // satt till true om vi vill skicka ett svar String urlLine = ""; // gör en sträng för att hålla den begärda URL: en om (klient) // om du får en klient, {Serial.println ("Ny klient."); // skriv ut ett meddelande från den seriella porten String currentLine = ""; // gör en sträng för att hålla inkommande data från klienten medan (client.connected ()) // loop medan klienten är ansluten {if (client.available ()) // om det finns byte att läsa från klienten, {char c = client.read (); // läs en byte, om (c == '\ n') // om byten är ett nyradstecken {// om den aktuella raden är tom får du två nyradstecken i rad. // det är slutet på klientens HTTP -begäran, så skicka ett svar: if (currentLine.length () == 0) {sendResponse = true; // allt är bra! ha sönder; // bryt ut ur medan -slingan} annars // om du fick en ny rad, rensa sedan currentLine: {if (currentLine.indexOf ("GET /")> = 0) // detta ska vara webbadressen {urlLine = currentLine; // spara den för senare användning} currentLine = ""; // återställ currentLine String}} else if (c! = '\ r') // om du har något annat än en vagnretur, {currentLine += c; // lägg till det i slutet av currentLine}}} if (sendResponse) {Serial.print ("Klient begärd"); Serial.println (urlLine); // HTTP-rubriker börjar alltid med en svarskod (t.ex. HTTP/1.1 200 OK) // och en innehållstyp så att klienten vet vad som kommer, sedan en tom rad: client.println ("HTTP/1.1 200 OK"); client.println ("Innehållstyp: text/html"); client.println (); if (urlLine.indexOf ("GET /")> = 0) // om webbadressen bara är en " /" {// innehållet i HTTP -svaret följer rubriken: client.println ("Hej världen!"); } // HTTP -svaret slutar med en annan tom rad: client.println (); } // stäng anslutningen: client.stop (); Serial.println ("Client Disconnected."); }}
Kopiera över koden ovan eller ladda ner den från åtagandet på GitHub.
Glöm inte att ändra SSID och lösenord för att matcha ditt nätverk.
Denna skiss använder den välkända Arduino
uppstart()
och
slinga()
funktioner. I
uppstart()
funktion seriell anslutning till IDE initieras och så är WiFi. När WiFi är anslutet till nämnda SSID skrivs IP -adressen ut och webbservern startas. I varje iteration av
slinga()
funktion webbservern kontrolleras för anslutna klienter. Om en klient är ansluten läses förfrågan och den begärda URL: en sparas i en variabel. Om allt verkar okej utförs ett svar från servern till klienten baserat på den begärda URL: en.
VARNING! Denna kod använder Arduino String -klassen för att hålla det enkelt. Strängoptimeringar är inte inom ramen för denna instruerbara. Läs mer om detta på instruktionsboken om Arduino String Manipulation Using Minimal Ram.
Steg 2: Skapa Remote JavaScript
Arduino / ESP kommer att berätta för besökarens webbläsare att ladda den här filen. Resten kommer att göras med denna JavaScript -kod.
I denna instruktionsbok använder vi oss av jQuery, detta är inte strikt nödvändigt, men kommer att göra det enklare.
Den här filen måste vara tillgänglig från webben, en statisk sidserver räcker för att få detta att fungera, till exempel GitHub -sidor. Så du kommer förmodligen att vilja skapa ett nytt GitHub -arkiv och skapa ett
gh-sidor
gren. Sätt följande kod i a
.js
fil i förvaret i rätt gren.
var cdnjsURL = 'https://cdnjs.cloudflare.com/ajax/libs/', $; (function () {var script = document.createElement ('script'); // skapa ett element script.src = cdnjsURL + 'jquery/3.2.1/jquery.min.js'; // ställ in src = "" attribut script.onload = function () // callback -funktion, kallas när jquery -filen har laddats {$ = window.jQuery; // gör jQuery tillgänglig som den globala $ variabel init (); // call init -funktionen}; dokument. getElementsByTagName ('head') [0].appendChild (script); // lägg till den skapade taggen i dokumentet, detta kommer att börja ladda jQuery lib}) (); function init () {// Klar att ladda jQuery, lägger till kod här senare …}
Kopiera över koden ovan eller ladda ner den från åtagandet på GitHub.
Kontrollera om din fil är tillgänglig. För GitHub-sidor, gå till https://username.github.io/repository/your-file.j… (ersätt
Användarnamn
,
förvar
och
din-fil.js
för de rätta parametrarna).
Steg 3: Ladda den externa JavaScript -filen i besökarens webbläsare
Nu när vi har allt klart är det dags att låta webbsidan ladda den fjärr -JavaScript -filen.
Du kan göra detta genom att ändra rad 88 i skissen från
client.println ("Hej världen!"); t
client.println ("");
(ändra
src
attribut för att peka på din egen JavaScript -fil). Detta är en liten html -webbsida, allt det gör är att ladda JavaScript -filen i besökarens webbläsare.
Den ändrade filen finns också i motsvarande åtagande på GitHub.
Ladda upp den justerade skissen till din Arduino / ESP.
Steg 4: Lägga till nya element på sidan
En tom sida är värdelös, så det är nu dags att lägga till ett nytt element på webbsidan. För tillfället kommer detta att vara en YouTube -video. I detta exempel kommer några jQuery -koder att användas för att uppnå detta.
Lägg till följande kodrad i
i det()
fungera:
$ (''). prop ({src: 'https://www.youtube.com/embed/k12h_FOInZg?rel=0', ramgräns: '0'}). css ({bredd: '608px', höjd: '342px'}). AppendTo ('body');
Detta kommer att skapa en
iframe
element, ställ in rätt
src
attribut och ställ in storleken med css och lägg till elementet på sidens kropp.
jQuery hjälper oss att enkelt välja och ändra element på webbsidan, några grundläggande saker att veta:
-
$ ('body')
- väljer alla redan existerande element, andra css -väljare kan också användas
-
$(' ')
skapar en ny
- element (men lägger inte till det i dokumentet)
-
.appendTo ('. main')
- lägger till det valda/skapade elementet till ett element med css -klassen 'main'
-
Andra funktioner för att lägga till element är
.bifoga()
,
.addera till början()
,
.prependTo ()
,
. Föra in()
,
.insertAfter ()
,
.insertBefore ()
,
.efter()
,
.innan()
Ta en titt på motsvarande engagemang på GitHub om något är oklart.
Steg 5: Interaktiva element
En video är kul, men syftet med denna instruerbara är att interagera med Arduino / ESP. Låt oss ersätta videon för en knapp som skickar information till Arduino / ESP och också väntar på ett svar.
Vi behöver en
$('')
att lägga till på sidan och bifoga en eventlistener till den. Eventlistener ringer upp återuppringningsfunktionen när den angivna händelsen inträffar:
$ (''). text ('en knapp'). på ('klicka', funktion ()
{// kod här körs när knappen klickas}). appendTo ('body');
Och lägg till en AJAX -begäran till återuppringningsfunktionen:
$.get ('/ajax', function (data)
{// koden här körs när AJAX -begäran är klar});
När begäran är klar kommer de returnerade uppgifterna att läggas till på sidan:
$('
').text (data).appendTo (' body ');
Sammanfattningsvis skapar ovanstående kod en knapp, lägger till den på webbsidan, när du klickar på knappen skickas en begäran ut och svaret läggs också till webbsidan.
Om det här är första gången du använder återuppringningar kanske du vill kontrollera åtagandet på GitHub för att se hur allt är kapslat.
Steg 6: Svara på det interaktiva elementet
Naturligtvis kräver AJAX -begäran ett svar.
För att skapa rätt svar för
/ajax
url måste vi lägga till en
annat om ()
strax efter stängningsfästet för if -satsen som kontrollerar
/
url.
annars om (urlLine.indexOf ("GET /ajax")> = 0)
{client.print ("Hej!"); }
I åtagandet på GitHub har jag också lagt till en räknare för att visa webbläsaren att varje begäran är unik.
Steg 7: Slutsats
Detta är slutet på denna instruerbara. Du har nu en Arduino / ESP som serverar en liten webbsida som berättar besökarens webbläsare att ladda en JavaScript -fil från molnet. När JavaScript har laddats bygger det upp resten av innehållet på webbsidan som ger ett användargränssnitt för användaren att kommunicera med Arduino / ESP.
Nu är det upp till din fantasi att skapa fler element på webbsidan och spara inställningarna lokalt på någon sorts ROM (EEPROM / NVS / etc).
Tack för att du läste, och ge gärna feedback!
Rekommenderad:
Komma igång med STM32f767zi Cube IDE och ladda upp din anpassade skiss: 3 steg
Komma igång med STM32f767zi Cube IDE och ladda upp din anpassade skiss: KÖP (klicka på testet för att köpa/besöka webbsidan) STM32F767ZISUPPORTED SOFTWARE · STM32CUBE IDE · KEIL MDK ARM µVISION · EWARM IAR EMBEDDED WORKBENCH · ARDUIN finns tillgänglig används för att programmera STM -mikrokontroller
Anslut din anläggning till molnet: 10 steg
Anslut din växt till molnet: På vårt kontor finns en kaktus som inte fick den uppmärksamhet den förtjänade. Eftersom jag arbetar på ett IT -företag och ville experimentera med LoRa, serverlösa lösningar och AWS, namngav jag vår kaktus Steeve och kopplade honom till molnet. Du kan nu övervaka
IoT Basics: Ansluta din IoT till molnet med Mongoose OS: 5 steg
IoT Basics: Ansluta din IoT till molnet med hjälp av Mongoose OS: Om du är en person som håller på med pyssel och elektronik, kommer du oftare än inte att stöta på begreppet Internet of Things, vanligtvis förkortat som IoT, och att det refererar till en uppsättning enheter som kan ansluta till internet! Att vara en sådan person
Ladda batterier från CD -spelaren utan att öppna locket: 5 steg
Ladda batterier från CD -spelaren utan att öppna locket: Jag använder en Sony MP3 -CD -spelare för att lyssna på podcaster och min ljudbibel, även MP3. Jag har NiCad AA -batterier i den. De var fria. Men om jag behöver ladda dem måste jag öppna locket för att komma till batterifacket. Det orsakar min plats i min
Ladda Axim X50v från alla USB -laddare + synkroniseringsproblem: 6 steg
Ladda Axim X50v från alla USB -laddare + synkroniseringsproblem: Nyligen hade jag några problem med min Dell Axim X50v PDA. Denna PDA laddas via USB, men kräver en 2.0 -port. Detta var aldrig ett problem tidigare, det är tills min dator slocknade och jag fick en ny. Av någon anledning skulle den nya datorn inte ansluta