搜啊搜,终于找到可用的 Arduino 直接访问 mysql 方案, 简单易行,摆脱对于各种 MQTT IOT 平台的依赖。目前暂时先考虑实现, 安全什么的以后完善吧:
测试环境:
1.Arduino UNO + W5100 (有空再测试 ESP8266 ESP32 )
2.Arduino IDE1.8.10
3.Arduino 库 mysql.h , IDE在线搜有两个关于mysql的库,但是直接用居然和下面的例子冲突,大概之前我手工装的库,就在我的资源里面可以找到 mysql_connector.zip sha1.zip 这两个压缩包。在线的库估计也能用的,有空再去折腾了,反正已经成功的跑起来了。
4.mysql-4.1.22-win32-Setup (这个大坑,必须老版本的才行,新的8.0连接不上,估计是arduino 库 的安全设置没搞定,等等党就等大神们)
MySQL 下载
https://blog.csdn.net/weixin_38168786/article/details/99992788
测试步骤:
-----------------------------------------PC端 操作-----------------------------------------------------
1.本地电脑安装mysql 4.0 。 windows10_x64_pro 实测没问题,也不用改防火墙什么的。
2.MySQL命令行进行配置,估计有图形化的,就几句命令,懒得去找了。 看到如下mysql> 提示符 就成功了第一步
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15 to server version: 4.1.22-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
3.创建一个实例
mysql> create database IOT default character set utf8;
4.创建一个表
mysql> CREATE TABLE `DHT22`(`D_time` varchar(20) ,`D_temperature` varchar(20) ) charset=utf8;
5.写点数据进表
mysql> INSERT INTO dht22 VALUES ('2020-09-11','29.25℃');
mysql> INSERT INTO dht22 VALUES ('2020-09-11','29.25℃');
6.查询看看
mysql> select * from iot.dht22;
+------------+---------------+
| D_time | D_temperature |
+------------+---------------+
| 2020-09-11 | 29.25℃ |
| 2020-09-11 | 29.25℃ |
| 2020-09-11 | 29.25℃ |
| 2020-09-11 | 29.25℃ |
| 2020-09-11 | 29.25℃ |
+------------+---------------+
5 rows in set (0.00 sec)
delete from dht22;
------------------------------------------------Arduino----------------------------------------------------
附 Arduino 程序:例程简单修改而成, 有些库没有在线安装即可,估计也有用不上的比如sha1.h, 可能原例程里其他语句需要
目前遇到小问题:
#include <NTPClient.h>
#include <SPI.h>
#include <Ethernet.h>
#include <stdlib.h>
#include <mysql.h>
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(10,176,29,102);
char user[] = "root";
char password[] = "mysql";
Connector my_conn; // The Connector/Arduino reference
//const char INSERT_DATA[] = "INSERT INTO iot.dht22 VALUES (CURDATE(),'10.11℃')"; // CURDATA()获取的是当前日期 "年-月-日", 2020-09-11 , 只能在sql语句中使用
const char INSERT_DATA[] = "INSERT INTO iot.dht22 VALUES (now(),'10.11℃')"; // now()也可以获取当前的时间,| 2020-09-11 20:12:12, 只能在sql语句中使用
void setup() {
Ethernet.begin(mac_addr);
Serial.begin(115200);
Serial.println("Connecting MySQL4.0...");
if (my_conn.mysql_connect(server_addr, 3306, user, password)) {
delay(1000);
}
else
Serial.println("Connection failed.");
}
void loop() {
my_conn.cmd_query(INSERT_DATA); // success insert to MySQL!!
delay(10000);
}
/*************************************
MySQL8.0 failed
MySQL4.0 OK
Connecting...
Connected to server version 4.1.22-community-nt
**************************************/
2022-05-30 更新:
ESP8266 直接连接 MySQL
https://blog.csdn.net/jiangge12/article/details/125039142