Visste du att Arduino kan lagra data när den är avstängd? Inte skissen lagrad i flashminnet. Jag talar om variabel data i EEPROM. Följ med mig när jag visar dig hur man läser och skriver till det och vad det kan göra för dina projekt.
Om du är ny hos Arduino, se till att du kolla in vår nybörjarguide Komma igång med Arduino: En nybörjarguide Komma igång med Arduino: En nybörjarhandbok Arduino är en öppen prototypplattform för öppen källkod baserad på flexibel, lättanvänd maskinvara och programvara. Den är avsedd för artister, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer .
Vad är EEPROM?
EEPROM står för elektriskt raderbart programmerbart läsminne . Det är en typ av icke-flyktigt minne. Oroa dig inte om du inte förstår vad något av det betyder. Det lagrar helt enkelt data även med strömmen borttagen (till skillnad från RAM En snabb och smutsig guide till RAM: Vad du behöver veta En snabb och smutsig guide till RAM: Vad du behöver veta RAM är en viktig del av varje dator, men det kan vara förvirrande för att förstå om du inte är en teknisk guru. I det här inlägget bryter vi ner det i enkla villkor. Läs mer, som behöver el för att behålla data).
EEPROM är inbyggd i en mängd processorer, som fältprogrammerbar grindmatris (FPGA) som används i Matrix Creator Matrix Creator för Raspberry Pi Review Matrix Creator för Raspberry Pi Review Matrix Creator är en schweizisk Army Knife för din Pi, med 15 sensorer, en serie kommunikationsprotokoll, en ring av RGB-LED, en mikrofonuppsättning och mycket mer! Läs mer Pi HAT. Alla Arduinos har EEPROM, men kapaciteten varierar per modell. Se till att du tittar på vår köpguide Arduino Köpguide: Vilket styrelse ska du få? Arduino Köpguide: Vilket styrelse ska du få? Det finns så många olika typer av Arduino brädor där ute, du skulle bli förlåtad för att vara förvirrad. Vilket ska du köpa för ditt projekt? Låt oss hjälpa till med den här Arduino-köpguiden! Läs mer för mer information om varje styrelse.
Hur fungerar det?
EEPROM raderas elektriskt och programmeras med Fowler-Nordheim tunnling . Du behöver inte veta de tekniska detaljerna för att kunna använda den. Den grundläggande förutsättningen är att el används för att ändra binärdata (vad är binärt? Vad är binärt? [Teknologi förklaras] Vad är binärt? [Teknologi förklarat] Eftersom binär är så helt grundläggande för förekomsten av datorer verkar det konstigt att Vi har aldrig tagit upp ämnet tidigare - så idag trodde jag att jag skulle ge en kort översikt över vad binärt ... Läs mer). Den kan läsas, raderas och omskrivas elektroniskt.
Lyckligtvis gör Arduino Language det enkelt att byta data, alla utan att behöva ha en examen i datavetenskap.
Förväntad livslängd
Även om det är lätt att använda EEPROM i Arduino, har det ett begränsat liv. EEPROM är specificerad för att hantera 100 000 läs / raderingscykler. Det betyder att du kan skriva och sedan radera / skriva om data 100 000 gånger innan EEPROM blir instabil. I själva verket kan Atmel (tillverkarna av Arduino "Chip") halvledare hantera ett högre eller lägre antal cykler beroende på toleranserna hos varje processor.
När en plats har skrivits och raderats för många gånger kan det börja bli otillförlitligt. Det kan inte returnera rätt data, eller returnera värdet från en närliggande bit.
Det kan låta som många skriv, men det går lätt att nå denna gräns om man läser och skriver programmatiskt (i en loop ). Läsning av data sönderdelar inte kiseln, endast skrivning gör det . Du kan läsa data från EEPROM så mycket du vill utan rädsla!
Det är viktigt att notera att denna gräns gäller för varje minnesplats. Din Arduino kan ha 1000 eller flera minnesplatser tillgängliga i EEPROM, så om du skriver för många gånger till en plats är det bara den platsen som påverkas, och inte någon av de andra. Senare kommer jag att diskutera slitstyrning som kan minska EEPROM-slitage genom att distribuera data jämnt - något som SSDs Hur man beräknar den återstående livslängden hos ditt SSD Hur man beräknar den återstående livslängden för SSD-enheten Alla SSD-enheter har en begränsad livslängd på grund av att skriva cykler (även om denna livslängd är mycket längre än du kanske tror). Så här kan du uppskatta hur nära du är till slutet. Läs mer utnyttja.
Vad är det användbart för?
EEPROM är oerhört användbart för dina Arduino-projekt. Eftersom det kommer ihåg data även när strömmen är borttagen, kan du lagra tillståndet för Arduino. Kanske kan du bygga en laser turret Pew Pew! Hur man bygger en laserturret med en Arduino Pew Pew! Hur man bygger en laserturret med en Arduino Är du uttråkad? Kan också bygga en lasertorn. Läs mer som kommer ihåg sin position eller hur mycket "ammo" är kvar. Du kan använda den för att styra dina apparater. Styr apparater från en Arduino: Starten av hemautomatikstyrningsapparater från en Arduino: Starten av hemautomatisering Förra gången visade jag dig några sätt att göra dina Arduino-projekt talstyrda via SiriProxy, OS X: s inbyggda talbara objekt, och vissa Automator-skript, eller till och med ett dedikerat hårddisk för ljudigenkänning. Jag ... Läs mer och logga in hur många gånger din apparat aktiverades.
EEPROM passar bäst för saker som inställningar eller highscores. Om du vill skriva komplexa data regelbundet, kan du kanske överväga en Ethernet-sköld Ge ditt Arduino-projekt sin egen Mini-Webserver, med en Ethernet-sköld Ge ditt Arduino-projekt sin egen Mini-Webserver med ett Ethernet-sköld För en tid sedan visade jag dig hur att installera ett internetkontrollsystem för din Arduino - men det var tvungen att hålla kontakten med en dator via USB för att upprätthålla internetanslutningen .... Läs mer (med inbyggd SD-kortplats) eller en hallon Pi Raspberry Pi: The Inofficiell självstudie Raspberry Pi: Den inofficiella handledningen Oavsett om du är en aktuell Pi-ägare som vill lära sig mer eller en potentiell ägare av denna kreditkortstorlek, är det här inte en guide du vill sakna. Läs mer .
Läsa och skriva
Nu när teorin är ute, låt oss titta på hur man läser och skriver några data! Först, inkludera biblioteket (det här kommer med Arduino IDE):
#include
Skriv nu några data:
EEPROM.write(0, 12);
Detta skriver numret 12 till EEPROM plats 0 . Varje skrivning tar 3, 3 millisekunder ( ms, 1000ms = 1 sekund). Lägg märke till hur du inte kan skriva bokstäver ( char ), endast siffrorna från noll till 255 är tillåtna. Det är därför EEPROM är idealiskt för inställningar eller höga poäng, men inte så bra för spelarnamn eller ord. Det går att lagra text med den här metoden (du kan kartlägga varje bokstav i alfabetet till ett tal), men du måste ha flera minnesplatser - en plats för varje bokstav.
Så här läser du den data:
EEPROM.read(0);
Noll är adressen du skrev till tidigare. Om du inte har skrivit till en adress förut kommer det att returnera maximivärdet ( 255 ).
Det finns några lite mer användbara metoder tillgängliga. Säg att du ville spara en decimal eller en sträng:
EEPROM.put(2, "12.67");
Detta skriver data till flera platser - något som skulle vara lätt att skriva själv, men praktiskt ändå. Du måste fortfarande hålla reda på hur många platser det här har skrivit till, så att du inte kommer att skicka dina uppgifter oavsiktligt! Du måste använda get- metoden för att hämta den här data igen:
float f = 0.00f; EEPROM.get(2, f);
Värdet från get lagras i float f- variabeln. Lägg märke till hur detta initialiseras med 0, 00f som värdet. F kan kompilatören veta att du kanske vill lagra ett stort antal i den här variabeln, så det ställer in några ytterligare konfigurationer under sammanställningen.
EEPROM-dokumentationen på Arduino-webbplatsen innehåller många fler exempel.
Använd nivellering
Använd nivellering är en teknik som används för att minska slitage och öka livslängden hos EEPROM. Om du bara arbetar på ett litet projekt behöver du inte oroa dig för det här.
Det enklaste du kan göra för att bevara EEPROM-livet är att begränsa dina skrivningar till en viss plats. Du kan göra detta genom att läsa adressen först och om värdet du vill skriva redan är närvarande behöver du inte skriva det igen (kom ihåg att läsning av data gör ingen skada). Så här skulle du göra det:
int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); } }
Det är en ganska enkel kod, men det fungerar bara för heltal! Istället för att återuppfinna hjulet, använd funktionen inbyggd i Arduino EEPROM-biblioteket:
EEPROM.update(address, val);
Denna metod har exakt samma signatur som skrivmetoden, även om det kan drastiskt minska antalet skrivningar som behövs!
Om du behöver skriva mycket data och är oroad över att du har kis ut, kan du hålla reda på hur många skriver du, även om det använder mer data. Här är en grov implementering i pseudokod:
var address = 0 var writeCount = 0 if(writeCount>75, 000) writeCount = 0 address += 1 EEPROM.write(address, data)
Du måste lagra adress och writeCount i EEPROM (och writeCount måste delas över adressplatser). Huvuddelen av tiden kommer denna skyddsnivå inte att vara nödvändig. Arduinos är så billiga också, så du kan hitta det lättare att köpa en säkerhetskopia!
Du borde nu veta tillräckligt för att göra några fantastiska projekt. Låt oss veta om du gör något coolt! Kan du känna igen alla enheter i bilderna? Lämna oss en kommentar nedan!