Propaganda
Você sabia que o Arduino pode armazenar dados quando desligado? Não é o esboço armazenado na memória flash. Estou falando de dados variáveis na EEPROM. Junte-se a mim enquanto eu lhe mostro como ler e escrever e o que isso pode fazer por seus projetos.
Se você é novo no Arduino, verifique nosso Guia do iniciante Introdução ao Arduino: Guia para iniciantesO Arduino é uma plataforma de prototipagem eletrônica de código aberto baseada em hardware e software flexível e fácil de usar. Destina-se a artistas, designers, amadores e qualquer pessoa interessada em criar objetos ou ambientes interativos. consulte Mais informação .
O que é EEPROM?
EEPROM significa memória somente leitura programável apagável eletricamente. É um tipo de memória não volátil. Não se preocupe se você não entende o que isso significa. Ele simplesmente armazena dados mesmo com a energia removida (ao contrário RAM Um guia rápido e sujo da RAM: o que você precisa saberA RAM é um componente crucial de qualquer computador, mas pode ser confusa. Nós a dividimos em termos fáceis de entender que você entenderá. consulte Mais informação , que precisa de eletricidade para reter qualquer dado).
A EEPROM está incorporada em uma infinidade de processadores, como o FPGA (field-programmable gate array) usado no Matrix Creator Revisão do Matrix Creator for Raspberry PiO Matrix Creator é um canivete suíço para o seu Pi, com 15 sensores, um conjunto de protocolos de comunicação, um anel de LEDs RGB, um conjunto de microfones e muito mais! consulte Mais informação Pi HAT. Todos os Arduinos têm EEPROM disponível, mas a capacidade varia de acordo com o modelo. Não deixe de dar uma olhada no nosso guia de compra Guia de compra do Arduino: Qual placa você deve adquirir?Existem tantos tipos diferentes de placas Arduino por aí que você seria perdoado por estar confuso. Qual você deve comprar para o seu projeto? Vamos ajudar, com este guia de compra do Arduino! consulte Mais informação para mais detalhes sobre cada placa.
Como funciona?
A EEPROM é eletricamente apagada e programada usando Tunelamento Fowler-Nordheim. Você não precisa conhecer os detalhes técnicos para poder usá-lo. A premissa básica é que a eletricidade é usada para alterar os dados binários (o que é binário O que é binário? [Tecnologia explicada]Dado que o binário é tão absolutamente fundamental para a existência de computadores, parece estranho que nunca tenhamos abordado o assunto antes - então hoje eu pensei em dar uma breve visão geral do que o binário ... consulte Mais informação ). Pode ser lido, apagado e reescrito eletronicamente.
Felizmente, o Linguagem Arduino facilita a alteração de dados, tudo sem a necessidade de um diploma em ciência da computação.
Expectativa de vida
Embora seja fácil usar a EEPROM no Arduino, ele tem uma vida útil limitada. A EEPROM é especificada para lidar com 100.000 ciclos de leitura / exclusão. Isso significa que você pode gravar e apagar / reescrever dados 100.000 vezes antes que a EEPROM se torne instável. Na realidade, Atmel (os fabricantes do "chip" do Arduino) podem lidar com um número maior ou menor de ciclos, dependendo das tolerâncias de cada processador.
Uma vez que um local tenha sido gravado e apagado muitas vezes, ele poderá se tornar não confiável. Pode não retornar os dados corretos ou retornar o valor de um bit vizinho.
Pode parecer muitas gravações, mas pode ser fácil atingir esse limite se ler e escrever programaticamente (em um ciclo, por exemplo). A leitura de dados não prejudica o silício, apenas escrever faz. Você pode ler os dados da EEPROM o quanto quiser sem medo!
É importante observar que esse limite se aplica a cada local da memória. Seu Arduino pode ter 1.000 ou mais locais de memória disponíveis na EEPROM; portanto, se você gravar muitas vezes em um local, será apenas esse local afetado, e não nenhum dos outros. Mais tarde vou discutir nivelamento de desgaste, o que pode reduzir o desgaste da EEPROM, distribuindo dados uniformemente - algo que SSDs Como estimar a vida útil restante do seu SSDTodos os SSDs têm uma vida útil limitada devido a ciclos de gravação (embora essa vida útil seja muito maior do que você imagina). Veja como você pode estimar o quão perto você está do fim. consulte Mais informação fazer uso de.
Para que é útil?
A EEPROM é incrivelmente útil para seus projetos do Arduino. Como ele lembra os dados, mesmo quando a energia é removida, você pode armazenar o estado do Arduino. Talvez você possa construir um torre a laser Piu Piu! Como construir uma torre a laser com um ArduinoVocê está entediado? Pode muito bem construir uma torre a laser. consulte Mais informação que se lembra da sua posição ou da quantidade de munição restante. Você poderia usá-lo para controle seus aparelhos Dispositivos de controle de um Arduino: o início da automação residencialNa última vez, mostrei algumas maneiras de controlar os discursos dos projetos do Arduino via SiriProxy, OS X itens faláveis integrados e alguns scripts do Automator, ou mesmo um hardware de reconhecimento de voz dedicado lasca. EU... consulte Mais informação e registre quantas vezes seu dispositivo foi ativado.
A EEPROM é mais adequada para itens como configurações ou pontuações mais altas. Se você deseja escrever dados complexos regularmente, considere escudo ethernet Dê ao seu projeto Arduino seu próprio mini-servidor com um escudo EthernetHá um tempo, mostrei como configurar um sistema de controle da Internet para o seu Arduino - mas ele precisava permanecer conectado a um computador via USB para manter a conexão à Internet ... consulte Mais informação (com slot SD embutido) ou um Raspberry Pi Raspberry Pi: o tutorial não oficialSe você é um proprietário atual do Pi que deseja saber mais ou um proprietário em potencial desse dispositivo de tamanho de cartão de crédito, este não é um guia que você deseja perder. consulte Mais informação .
Leia e escreva
Agora que a teoria está pronta, vamos ver como ler e escrever alguns dados! Primeiro, inclua a biblioteca (isso vem com o Arduino IDE):
#incluir
Agora escreva alguns dados:
EEPROM.write (0, 12);
Isso escreve o número 12 para a localização da EEPROM 0. Cada gravação leva 3,3 milissegundos (Senhora, 1000 ms = 1 segundo). Observe como você não pode escrever cartas (Caracteres), apenas os números de zero a 255 são permitidos. É por isso que a EEPROM é ideal para configurações ou pontuações mais altas, mas não tão boa para nomes ou palavras de jogadores. É possível armazenar texto usando esse método (você pode mapear cada letra do alfabeto para um número); no entanto, você precisará ter vários locais de memória - um local para cada letra.
Veja como você lê esses dados:
EEPROM.read (0);
Zero é o endereço para o qual você escreveu anteriormente. Se você não tiver gravado em um endereço antes, ele retornará o valor máximo (255).
Existem alguns métodos um pouco mais úteis disponíveis. Digamos que você queira armazenar uma casa decimal ou string:
EEPROM.put (2, "12,67");
Isso grava os dados em vários locais - algo que seria fácil de escrever, mas útil mesmo assim. Você ainda precisará acompanhar para quantos locais isso foi gravado, para não sobrescrever acidentalmente seus dados! Você tem que usar o obter método para recuperar esses dados novamente:
flutuar f = 0,00f; EEPROM.get (2, f);
O valor de get é armazenado no float f variável. Observe como isso é inicializado com 0,00f como o valor o f permite que o compilador saiba que você pode querer armazenar um grande número nessa variável, para que ele faça algumas configurações adicionais durante a compilação.
o Documentação EEPROM no Site do Arduino tem muito mais exemplos.
Nivelamento de desgaste
O nivelamento de desgaste é uma técnica usada para reduzir o desgaste e aumentar a vida útil da EEPROM. Se você estiver trabalhando apenas em um projeto pequeno, talvez não precise se preocupar com isso.
A coisa mais simples que você pode fazer para preservar a vida útil da EEPROM é limitar suas gravações em um local específico. Você pode fazer isso lendo o endereço primeiro e, se o valor que você deseja escrever já estiver presente, não será necessário escrevê-lo novamente (lembre-se, a leitura de dados não faz mal). Aqui está como você faria isso:
int safeWrite (dados int, endereço) {if (EEPROM.read (endereço)! = dados) {EEPROM.write (endereço, dados); } }
Isso é um pouco simples de código, no entanto, funciona apenas para números inteiros! Em vez de reinventar a roda, use a função incorporada na biblioteca EEPROM do Arduino:
EEPROM.update (endereço, val);
Este método tem exatamente a mesma assinatura que o escrever, embora possa reduzir drasticamente o número de gravações necessárias!
Se você precisar gravar muitos dados e estiver preocupado com o desgaste do silício, poderá acompanhar quantas gravações você faz, embora isso use mais dados. Aqui está uma implementação aproximada em pseudo-código:
endereço var = 0. var writeCount = 0 if (writeCount> 75.000) writeCount = 0 endereço + = 1 EEPROM.write (endereço, dados)
Você precisará armazenar o endereço e o writeCount na EEPROM (e o writeCount precisará ser dividido entre os locais dos endereços). Na maioria das vezes, esse nível de proteção não será necessário. Os arduinos também são tão baratos, então você pode achar mais fácil comprar um backup!
Agora você deve saber o suficiente para fazer alguns projetos impressionantes. Deixe-nos saber se você faz algo legal! Você consegue reconhecer todos os dispositivos nas fotos? Deixe-nos um comentário abaixo!
Joe é graduado em Ciência da Computação pela Universidade de Lincoln, Reino Unido. Ele é um desenvolvedor de software profissional e, quando não está pilotando drones ou escrevendo músicas, pode ser encontrado tirando fotos ou produzindo vídeos.