ESP8266 - Ler Configuração do Cartão SD
Este tutorial guia você no uso de um arquivo de configuração em um cartão Micro SD com o ESP8266, abrangendo os seguintes aspectos:
Colocar um arquivo config.txt no cartão Micro SD, contendo pares chave-valor.
Programar o ESP8266 para ler os dados de configuração do cartão Micro SD e armazená-los em uma variável int .
Programar o ESP8266 para ler os dados de configuração do cartão Micro SD e armazená-los em uma variável float .
Programar o ESP8266 para ler os dados de configuração do cartão Micro SD e armazená-los em uma variável String .
Or you can buy the following kits:
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Se você não conhece o módulo de cartão Micro SD, incluindo sua pinagem, como ele funciona e como programá-lo, confira o tutorial ESP8266 - Cartão Micro SD .
Cada par chave-valor fica em uma única linha do cartão Micro SD, com a chave e o valor divididos por um caractere = . Além disso, cada par é separado dos outros por um caractere de nova linha.
O código do ESP8266 procurará a chave e localizará o valor associado, armazenando-o em uma variável. Essa variável pode ser int , float ou String .
This image is created using Fritzing . Click to enlarge image
Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes .
※ Nota:
Se você tem um Ethernet shield ou qualquer outro shield que inclua um suporte para cartão Micro SD, não precisa usar o módulo de cartão Micro SD. Basta inserir o cartão Micro SD no suporte do shield.
myString_1=Hello
myString_2=newbiely.com
myInt_1=2
myInt_2=-105
myFloat_1=0.74
myFloat_2=-46.08
Conecte o cartão Micro SD ao PC por meio de um leitor de cartão SD USB 3.0.
Verifique se o cartão Micro SD está formatado como FAT16 ou FAT32 (procure instruções na internet).
Coloque o arquivo config.txt no diretório principal do cartão Micro SD.
Quando terminar, desconecte o cartão Micro SD do PC.
Conecte o cartão Micro SD ao ESP8266 usando o módulo de cartão Micro SD conforme o diagrama de ligação.
Copie o código abaixo e abra-o com o Arduino IDE.
#include <SD .h>
#define PIN_SPI_CS D8
#define FILE_NAME "config.txt"
#define KEY_MAX_LENGTH 30
#define VALUE_MAX_LENGTH 30
int myInt_1;
int myInt_2;
float myFloat_1;
float myFloat_2;
String myString_1;
String myString_2;
void setup () {
Serial .begin (9600);
if (!SD .begin (PIN_SPI_CS)) {
Serial .println (F ("SD Card failed, or not present" ));
while (1);
}
Serial .println (F ("SD Card initialized." ));
myInt_1 = SD_findInt(F ("myInt_1" ));
myInt_2 = SD_findInt(F ("myInt_2" ));
myFloat_1 = SD_findFloat(F ("myFloat_1" ));
myFloat_2 = SD_findFloat(F ("myFloat_2" ));
myString_1 = SD_findString(F ("myString_1" ));
myString_2 = SD_findString(F ("myString_2" ));
Serial .print (F ("myInt_1 = " ));
Serial .println (myInt_1);
Serial .print (F ("myInt_2 = " ));
Serial .println (myInt_2);
Serial .print (F ("myFloat_1 = " ));
Serial .println (myFloat_1);
Serial .print (F ("myFloat_2 = " ));
Serial .println (myFloat_2);
Serial .print (F ("myString_1 = " ));
Serial .println (myString_1);
Serial .print (F ("myString_2 = " ));
Serial .println (myString_2);
}
void loop () {
}
bool SD_available(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return value_length > 0;
}
int SD_findInt(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2Int(value_string, value_length);
}
float SD_findFloat(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2Float(value_string, value_length);
}
String SD_findString(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2String(value_string, value_length);
}
int SD_findKey(const __FlashStringHelper * key, char * value) {
File configFile = SD .open (FILE_NAME);
if (!configFile) {
Serial .print (F ("SD Card: error on opening file " ));
Serial .println (FILE_NAME);
return ;
}
char key_string[KEY_MAX_LENGTH];
char SD_buffer[KEY_MAX_LENGTH + VALUE_MAX_LENGTH + 1];
int key_length = 0;
int value_length = 0;
PGM_P keyPoiter;
keyPoiter = reinterpret_cast<PGM_P>(key);
byte ch;
do {
ch = pgm_read_byte(keyPoiter++);
if (ch != 0)
key_string[key_length++] = ch;
} while (ch != 0);
while (configFile.available ()) {
int buffer_length = configFile.readBytesUntil ('\n' , SD_buffer, 100);
if (SD_buffer[buffer_length - 1] == '\r' )
buffer_length--;
if (buffer_length > (key_length + 1)) {
if (memcmp(SD_buffer, key_string, key_length) == 0) {
if (SD_buffer[key_length] == '=' ) {
value_length = buffer_length - key_length - 1;
memcpy(value, SD_buffer + key_length + 1, value_length);
break ;
}
}
}
}
configFile.close ();
return value_length;
}
int HELPER_ascii2Int(char *ascii, int length ) {
int sign = 1;
int number = 0;
for (int i = 0; i < length ; i++) {
char c = *(ascii + i);
if (i == 0 && c == '-' )
sign = -1;
else {
if (c >= '0' && c <= '9' )
number = number * 10 + (c - '0' );
}
}
return number * sign;
}
float HELPER_ascii2Float(char *ascii, int length ) {
int sign = 1;
int decimalPlace = 0;
float number = 0;
float decimal = 0;
for (int i = 0; i < length ; i++) {
char c = *(ascii + i);
if (i == 0 && c == '-' )
sign = -1;
else {
if (c == '.' )
decimalPlace = 1;
else if (c >= '0' && c <= '9' ) {
if (!decimalPlace)
number = number * 10 + (c - '0' );
else {
decimal += ((float )(c - '0' ) / pow (10.0, decimalPlace));
decimalPlace++;
}
}
}
}
return (number + decimal) * sign;
}
String HELPER_ascii2String(char *ascii, int length ) {
String str;
str.reserve(length );
str = "" ;
for (int i = 0; i < length ; i++) {
char c = *(ascii + i);
str += String (c);
}
return str;
}
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
SD Card initialized.
myInt_1 = 2
myInt_2 = -105
myFloat_1 = 0.74
myFloat_2 = -46.08
myString_1 = Hello
myString_2 = newbiely.com
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
Agora você pode alterar o código para incluir variáveis adicionais.
※ Nota:
O código não leva em conta a ordem dos pares chave-valor. Ele pesquisará do início ao fim do arquivo até encontrar a chave.
※ NOSSAS MENSAGENS
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!