gpt4 book ai didi

mysql - 我可以使用我的 Arduino Uno Wifi 写入 SQL 数据库吗?

转载 作者:行者123 更新时间:2023-11-29 02:46:10 31 4
gpt4 key购买 nike

我最近买了一个Arduino Uno Wifi为了将我的 Arduino 中的传感器数据直接写入现有的 MySQL 数据库中。我想既然有一些现有的库(比如 this 一个)在以太网或 wifi 屏蔽的帮助下做完全相同的事情,那应该不是什么大问题。我在购买 Uno Wifi 后发现的问题是,它们都需要自己的库(如 Ethernet.h 或 Wifi.h)。我需要一个额外的防护罩来使用它们,这在我看来没有多大意义,因为我已经购买了一个支持 wifi 的 Arduino。我知道有类似 ThingSpeak 的东西这是受支持的,但我不想失去我自己的数据库的灵 active ,也不需要 ThingSpeak 为我提供的所有额外分析服务。

所以我有点绝望的问题是 - 有没有一种方法可以使用我的(全新)Arduino Uno WIFI 通过简单的 INSERT INTO 语句将数据写入现有数据库?

编辑:

我今天尝试了一些东西,这就是我到目前为止想出的:

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <UnoWiFiDevEd.h>

IPAddress server_addr(88, 198, 61, 231); // IP of the MySQL *server* here
char user[] = "USERxxxxxx"; // MySQL user login username
char password[] = "xxxxxxxxx"; // MySQL user login password

// Sample query
char INSERT_SQL[] = "INSERT INTO `arduino_test`(`Humidity`, `Temperature`, `DateTime`) VALUES (60, 23, '2017-02-02 20:34:20')";

WiFiClient client;
MySQL_Connection conn((Client *)&client);

void setup() {
Serial.begin(9600);
while (!Serial); // wait for serial port to connect

Wifi.begin();

Serial.println("Connecting");

if (conn.connect(server_addr, 3306, user, password)) {
delay(5000);
Serial.println("Connection successful");
} else {
Serial.println("Connection failed!");
}
}


void loop() {
delay(2000);

Serial.println("Recording data.");

// Initiate the query class instance
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
// Execute the query
cur_mem->execute(INSERT_SQL);
// Note: since there are no results, we do not need to read any data
// Deleting the cursor also frees up memory used
delete cur_mem;
}

这会导致程序无法与服务器建立连接,只能不断地向串行监视器打印“正在连接”。

编辑 2:

我想通了,感谢@cagdas 先检查连接的想法。这是我现在的草图:

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <Wire.h>
#include <UnoWiFiDevEd.h>


IPAddress server_addr(88, 198, 61, 231); // IP of the MySQL *server* here
char user[] = "USERxxxxxx"; // MySQL user login username
char password[] = "xxxxxxx"; // MySQL user login password

// Sample query
char INSERT_SQL[] = "INSERT INTO `arduino_test`(`Humidity`, `Temperature`, `DateTime`) VALUES (60, 23, '2017-02-02 20:34:20')";

WifiData client;
MySQL_Connection conn((Client *)&client);

void setup() {

char* connector = "rest";
char* server = "download.arduino.org";
char* method = "GET";
String resource = "/latest.txt";

Serial.begin(9600);
Ciao.begin();

pinMode(2, INPUT);

delay(5000);
doRequest(connector, server, resource, method);

Wifi.begin();

Serial.println("Connecting");

if (conn.connect(server_addr, 3306, user, password)) {
Serial.println("Connection successful");
} else {
Serial.println("Connection failed!");
}
}

void loop() {
delay(2000);

Serial.println("Recording data.");

// Initiate the query class instance
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
// Execute the query
cur_mem->execute(INSERT_SQL);
// Note: since there are no results, we do not need to read any data
// Deleting the cursor also frees up memory used
delete cur_mem;
}

void doRequest(char* conn, char* server, String command, char* method) {
CiaoData data = Ciao.write(conn, server, command, method);
if (!data.isEmpty()) {
Ciao.println( "State: " + String (data.get(1)) );
Ciao.println( "Response: " + String (data.get(2)) );
Serial.println( "State: " + String (data.get(1)) );
Serial.println( "Response: " + String (data.get(2)) );
}
else {
Ciao.println ("Write Error");
Serial.println ("Write Error");
}
}

如果连接有效,这应该打印出“State: 200”和“Response: 10709”。但它实际上只打印了一个 0。如果我删除我的循环并只写

void loop() {}

它工作正常(但显然不会向数据库中写入任何内容)。将循环中的代码放入此 if 语句“if (conn.connect(server_addr, 3306, user, password))”中也不会返回正确的结果。所以在这一点上我仍然不知道为什么这段代码不起作用,但我认为它可能会更深入地了解可能的解决方案。Arduino IDE 也告诉我类似这样的事情

The sketch is using 50% of the memory

Global variables use 88% of the memory

There is only little RAM left -> stability issues possible(sorry, it's in german)

最佳答案

您可以通过包含 ESP8266 的重载 WiFiClient 来使用它。

#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

WiFiClient client;
MySQL_Connection conn((Client *)&client);

网络客户端在 Arduino 端有 super 继承,所以 WiFiClient需要实现你需要的东西。

您将继续您的代码:

WiFi.begin(SSID,PASS);

关于mysql - 我可以使用我的 Arduino Uno Wifi 写入 SQL 数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990804/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com