我一直在尝试加快从这个
的日志记录,它是一个集成了 SD 和 ESP8266 的 Arduino Mega,等等。因此,我设法将所有内容从 Mega(板 PLDUINO/Mega2560)记录到 SD 卡中,并尝试通过串行端口发送 mySQL 批处理字符串(ESP8266 通过 Serial2 连接到 Mega),这有点奏效,但是慢慢地。所以我设法用 Mega 上的代码连接到 SD 卡,一旦我加载了旧的 SD 库,版本 1.09。(在此设置中,我无法使用当前的 SD 库 v1.1 及更高版本初始化 SD 卡)。
所以现在我已经将一些代码加载到附加的 ESP8266 卡(板 PLDuino/ESP-02),我的想法是读取记录到 SD 卡的数据并将 DATA INFILE 语句发送到 mySQL 数据库。
从我包含的简短测试代码中看不出来,但我必须将 ESP8266WiFi.h 加载到 ESP8266 板上,以便在没有 php 页面中介的情况下通过 wifi 直接与 mySQL 数据库
通信。我无法通过 wifi 直接从 Mega 向数据库发送语句,ESP8266WiFi 库无法在 Mega 板上编译,必须在 ESP8266 板上编译。
尝试使用 SPI 从 ESP8266 板上读取 SD。Mega2560 芯片选择是 53。我对 ESP8266 芯片选择是什么感到困惑,已经尝试了很多,但我想知道问题是我使用了错误的芯片选择还是需要不同的 SD 库。这是我上传到 Mega 的代码:
代码:
全选#include
#include
#include
#include
HardwareSerial &wifi = Serial2;
Sd2Card card;
bool card_initialized;
void logSD(String dataString){
File dataFile = SD.open("test.txt", FILE_WRITE);
if (dataFile) {
// dataFile.println(dataString);
// dataFile.close();
// print to the serial port too:
// Serial.println(dataString);
}
File myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");
Serial.flush();
// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
Serial.flush();
// close the file:
myFile.close();
}
else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
Serial.flush();
}
Serial.println("Mtest done.");
delay(5000);
}
String monitorESP()
{
String recv = "";
// Initializing ESP module
PLDuino::enableESP();
// Reset ESP
Serial.println("starting ESP");
digitalWrite(PLDuino::ESP_RST, LOW);
delay(500);
digitalWrite(PLDuino::ESP_RST, HIGH);
delay(500);
while (true){
while (!wifi.available())
delay(500);
recv = wifi.readString();
Serial.println("test:" + recv);
delay(500);
}
}
void setup()
{
// A convenient macro which prints start-up messages to both LCD and Serial.
#define LOG(msg) {Serial.println(msg); }
pinMode(38, OUTPUT);
digitalWrite(38, HIGH);
pinMode(10, OUTPUT);
digitalWrite(53, HIGH);
// NB: This line is necessary in all sketches which use PLDuino library stuff.
PLDuino::init();
// Power-on LCD and set it up
PLDuino::enableLCD();
// Setup serials. Serial2 is connected to ESP-02 Wi-Fi module.
Serial.begin(115200);
Serial2.begin(115200);
// We need to initialize SD card at startup!
LOG("Initializing SD card...")
if (!SD.begin(PLDuino::SD_CS))
LOG("ERROR: Can't initialize SD card!")
delay(500);
//write something to SD to see if can read from ESP
logSD("test SD writes");
digitalWrite(53, LOW);
monitorESP();
}
void loop() {
// put your main code here, to run repeatedly:
}
这是 ESP8266 上的代码:
代码:全选#include
#include
#define FILENAME "test.txt"
#define ESP_CS 15 //tried 8, 53, 4, 10
void setup()
{
// Initializing Serial.
Serial.begin(115200);
//pinMode(10, OUTPUT);
digitalWrite(SS, LOW);
digitalWrite(ESP_CS,HIGH);
SPI.begin();
//digitalWrite(ESP_SS, LOW);
// Initializing SD card.
if (!SD.begin(ESP_CS))
{
Serial.println("Failed to initialize SD card. Please check it.");
return;
} else {
Serial.println("Initialized!");
}
// Trying to create a file
{
Serial.println("Creating a file...");
// Opening a file for writing...
File f = SD.open(FILENAME, FILE_WRITE);
if (!f)
{
// Stop on error
Serial.println("Failed to create " FILENAME " file. Stop.");
// return;
}
else{
// Write some data there
f.println("Test string");
f.close(); // close when done
}
}
// Trying to read a file
{
Serial.println("Re-opening the file for reading...");
// Trying to open our file.
File f = SD.open(FILENAME, FILE_READ);
if (!f)
{
// Stop on error
Serial.println("Failed to open newly created file " FILENAME ". Stop.");
return;
}
Serial.println("File contents: ");
// Read out file contents and print them to Serial.
while(!f.available())
Serial.write(f.read());
Serial.println(); Serial.println("--end--");
f.close(); // close when done
}
}
void loop()
{
}
我不断收到:
无法初始化 SD 卡。请检查
我无法使用 Mega2560 代码执行 SD.open,直到我将 SD 库降级到 1.09。不确定如何使用 ESP8266 代码执行此操作,它使用的是特定于硬件的库。
可能偏离主题但相关信息:
我尝试刷新各种 NodeMCU 版本,包括包含 FatFS 和 SPI 的自定义版本,但我什至无法获得挂载 SD0 的 lua 初始化代码,所以也不确定那里有什么问题。挂载 SD 的 lua 代码如下所示:
代码:全选spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
-- initialize other spi slaves
-- then mount the sd
-- note: the card initialization process during `file.mount()` will set spi divider temporarily to 200 (400 kHz)
-- it's reverted back to the current user setting before `file.mount()` finishes
vol = file.mount("/SD0", 8) -- 2nd parameter is optional for non-standard SS/CS pin
if not vol then
print("retry mounting")
vol = file.mount("/SD0", 8)
if not vol then
error("mount failed")
end
end
file.open("/SD0/path/to/somefile")
print(file.read())
file.close()