arduino w5500 mysql,W5500网络模块会出现奇怪的问题
本帖最后由 ilychw 于 2019-3-26 19:36 编辑
本人用W5500来上传温湿度数据到服务器,刚开始是可以上传数据的,但不定期(有时几个小时,有时一天或两天)就会出现用Ethernet.localIP()获取到的IP显示是0.0.0.0,然后上传不了数据,或者IP显示是正常的的,也可以PING通这个IP,但就是上传不了数据,重新初始化也是不行,LCD显示屏会出现花屏等现象。以为计算机的USB口电压不够,就用了手机的充电插头,也是一样的情况。真的没办法了。[mw_shl_code=arduino,true]
#include
#include
#include
#include
#include
#include
#include //定时器库的头文件
#define dht11pin 8 //DHT11的DATA脚
#define W5500CS 10 //W5500的CS脚
bool showtime = false; //是否显示时间
LiquidCrystal lcd(4, 5, A0, A1, A2, A3); //对应LCD1602的RS, E, D4, D5, D6, D7
DS3231 Clock; //DS3231的SDA接A4,SCL接A5
bool h12, PM, Century = false;
int p = 6; //LCD1602的V0脚
dht11 DHT11;
char inString[27];
int stringPos = 0;
boolean startRead = false; //是否开始读取服务器返回的数据
float temp = 0; //保存温度
float hum = 0; //保存湿度
float jg = 20; //发送内容的间隔
String sp = " ";
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 109);
IPAddress myDns(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
char server[] = "192.168.0.2"; //服务器地址
EthernetClient client;
void(* resetFunc)(void) = 0; //制造重启命令
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
pinMode(p, OUTPUT);
analogWrite(p, 110);
lcd.begin(16, 2);
lcd.clear();
Ethernet.init(W5500CS); //初始化W5500的CS脚对应的D10
Ethernet.begin(mac, ip, myDns, gateway, subnet); //W5500的CS接D10,SI接D11,SO接D12,SCK接D13
delay(1000);
setDateTime();
getTempHum();
showData(temp, hum);
sendData();
//client.flush();
MsTimer2::set(jg * 1000 * 60, sendData); //中断设置函数,每jg分钟进入一次中断
MsTimer2::start(); //开始计时
}
void loop() {
// put your main code here, to run repeatedly:
if(Ethernet.localIP()[0] == '0'){
Ethernet.init(W5500CS);
Ethernet.begin(mac, ip, myDns, gateway, subnet);
delay(500);
}
getTempHum();
showData(temp, hum);
}
void setDateTime(){
Serial.println("connecting...");
if(client.connect(server, 80)){
Serial.println("connected");
client.println("GET /tempHum/getTime.aspx HTTP/1.0");
client.println();
}
else{
Serial.println("connection failed");
}
Serial.println(Ethernet.localIP());
lcd.setCursor(0, 0);
lcd.print(Ethernet.localIP());
lcd.setCursor(0, 1);
lcd.print("Initialization.");
Serial.println(readPage());
/*for(int i = 3; i < readPage().length() - 4; i ++){
Serial.print(readPage());
}*/
Serial.println();
String year = (String)readPage()[3] + (String)readPage()[4] + (String)readPage()[5] + (String)readPage()[6];
String month = (String)readPage()[8] + (String)readPage()[9];
String day = ((String)readPage()[11] + (String)readPage()[12]);
String hour = ((String)readPage()[14] + (String)readPage()[15]);
String minute = ((String)readPage()[17] + (String)readPage()[18]);
String second = ((String)readPage()[20] + (String)readPage()[21]);
Clock.setYear(year.toInt() - 2000);
Clock.setMonth(month.toInt());
Clock.setDate(day.toInt());
Clock.setHour(hour.toInt());
Clock.setMinute(minute.toInt());
Clock.setSecond(second.toInt());
client.stop();
client.flush();
}
String readPage(){
while(true){
if(client.available()){
char c = client.read();
if(c == 'YYYY-MM-DD HH:mm:SS
startRead = true; //可以读取数据
}
if(startRead){
inString[stringPos] = c; //将读取到的字节保存
stringPos++; //记数加1
}
}
else{
return inString;
}
}
}
void getTempHum(){
int chk = DHT11.read(dht11pin); //读取DHT11的数据
temp = (float)DHT11.temperature; //保存读取的温度
hum = (float)DHT11.humidity; //保存读取的湿度
}
void showData(float temp, float hum){
int hour = Clock.getHour(h12, PM); //以24小时制显示小时
int minute = Clock.getMinute();
int second = Clock.getSecond();
int n = second % 10;
int m = second / 10;
if(showtime)
{
lcd.setCursor(0, 0);
lcd.print("20");
lcd.print(Clock.getYear());
lcd.print("-");
//if(Clock.getMonth(Century) < 10){
// print.print("0");
//}
lcd.print(Clock.getMonth(Century));
lcd.print("-");
lcd.print(Clock.getDate());
if((Clock.getMonth(Century) < 10) && (Clock.getDate() < 10)){
sp = " ";
}
else if((Clock.getMonth(Century) > 9) && (Clock.getDate() > 9)){
sp = " ";
}
else{
sp = " ";
}
lcd.print(sp);
lcd.setCursor(11, 0);
lcd.print(temp);
lcd.setCursor(15, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print(Clock.getHour(h12, PM));
lcd.print(":");
if(Clock.getMinute() < 10){
lcd.print("0");
}
lcd.print(Clock.getMinute());
lcd.print(":");
if(Clock.getSecond() < 10){
lcd.print("0");
}
lcd.print(Clock.getSecond());
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(hum);
lcd.setCursor(15, 1);
lcd.print("%");
}
else{
lcd.setCursor(0, 0);
lcd.print(Ethernet.localIP());
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(temp);
lcd.setCursor(4, 1);
lcd.print("C");
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(hum);
lcd.setCursor(15, 1);
lcd.print("%");
}
if((m % 2 == 0) && n == 0){ //秒数是否被2整除
showtime = false;
}
else if((m % 2 != 0) && n == 0){
showtime = true;
}
if((minute == 0) && (second == 0)){
setDateTime();
delay(1000);
}
}
void sendData(){
String url = "GET /tempHum/Add.aspx?ip="; //拼接url
url.concat(Ethernet.localIP()[0]);
url.concat(".");
url.concat(Ethernet.localIP()[1]);
url.concat(".");
url.concat(Ethernet.localIP()[2]);
url.concat(".");
url.concat(Ethernet.localIP()[3]);
url.concat("&mac=");
String strMac = String(mac[0], HEX);
strMac.concat(String(mac[1], HEX));
strMac.concat("-");
strMac.concat(String(mac[2], HEX));
strMac.concat(String(mac[3], HEX));
strMac.concat("-");
strMac.concat(String(mac[4], HEX));
strMac.concat(String(mac[5], HEX));
url.concat(strMac);
url.concat("&temp=");
url.concat(temp);
url.concat("&hum=");
url.concat(hum);
url.concat(" HTTP/1.0");
if(client.connect(server, 80)){
Serial.println(url);
client.println(url);
client.println();
}
else{
Serial.println("connection failed");
Ethernet.init(W5500CS);
delay(1000);
}
client.stop();
client.flush();
}
[/mw_shl_code]
arduino w5500 mysql,W5500网络模块会出现奇怪的问题相关推荐
- mysql创建触发器难题_[]MYSQL创建触发器遇到很奇怪的有关问题
[求助]mysql创建触发器遇到很奇怪的问题. 今天遇到一个很奇怪的问题,是关于创建触发器的.创建触发器代码如下 SQL code create trigger trigger_t_test_U af ...
- linux下w5500驱动程序,W5500驱动函数库.pdf
W5500驱动函数库 W5500 驱动函数库 /**************************************************************************** ...
- mysql查询错误_一个奇怪的MySQL查询错误
t_user表的phone_number字段是varchar(255)类型的,表示手机号, 在查询某个手机号时,sql语句如下: SELECT phone_number FROM t_user WH ...
- mysql 5.7 errmsg.sys,奇怪的MySql错误无法从messagefile中读取... errmsg.sys
我试图在没有安装的情况下运行MySQL. 我下载了& Lt; mysql-5.7.20-macos10.12-x86_64.tar.gz& Gt;.在解压缩的文件夹中,我创建了一个文件 ...
- STM32驱动W5500连接腾讯云
STM32驱动W5500连接腾讯云 1.W5500简介 W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案. W5500 集成了 TCP/IP ...
- STM32 以太网W5500
文章目录 W5500简介 以太网接入方案 SPI读写访问 寄存器以及地址 源码以及配置 实现 TCP Server 三次握手过程 SPI 配置 网络相关函数 W5500简介 W5500 是一款全硬件 ...
- STM32+W5500以太网模块
一:w5500以太网模块介绍: W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方 案.W5500 集成了 TCP/IP 协议栈,10/100M 以太 ...
- STM32驱动W5500动态分配IP
TM32驱动W5500动态分配IP 1.W5500简介 W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案. W5500 集成了 TCP/IP ...
- STM32之W5500网络通信
STM32之W5500网络通信 一.W5500 二.DHCP 三.modbus 四.实现web服务 参考 一.W5500 Niren_W5500模块是一款基于WIZnet W5500芯片的以太网模块, ...
最新文章
- jar打包命令-指定主类一次搞定!
- c++几种智能指针比较
- Windows 7 SP1确实将有性能改进
- 自绘制View---------左右滑动刻度调频View
- Android取消EditText自动获取焦点默认行为
- 数据库面试题【六、Sql的优化】
- Spring Boot 整合 Shiro
- 开榨油店的失败教训_想开水果店没有经验?线下开水果店经营心得分享,或许你用得上...
- ETH联合Meta和鲁汶大学 提出视频恢复算法VRT,在视频超分辨率、去模糊和去噪性能达到SOTA...
- 笨办法学 Python · 续 练习 51:`lessweb`
- pandas python groupby_python – pandas groupby方法实际上是如何工作的?
- VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...
- apollo代码修改配置_灰度实战(四):Apollo配置中心(4)
- Mysql 配置文件常见配置
- “华为杯”山东理工大学第十一届 ACM程序设计竞赛 我不是股神
- b站《史上最全unity3D教程》笔记1-04
- 计算机课反思的作文600字,中考反思作文600字6篇
- 用C语言编写的骂人的软件,“骂人软件”再智能 暴力永远是暴力
- CV之ModelScope:基于ModelScope框架的人脸人像数据集利用DCT-Net算法实现人像卡通化图文教程之详细攻略
- 服务器显示时间差8个小时,服务器时间相差8小时 原因与解决方法
热门文章
- javascript CDATA
- 信息学奥赛一本通(1134:合法C标识符查)
- 图论 —— 图的连通性 —— 传递闭包
- 围圈报数(信息学奥赛一本通-T1334)
- 信息学奥赛C++语言:行李托运
- 8 SD配置-企业结构-分配-给公司代码分配销售组织
- 27 FI配置-财务会计-外币评估-定义评估方范围
- 尚硅谷_springcloud(2020新版 思维导图_全网最火SpringCloud2020全家桶教程
- linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
- yaml 文件内部使用变量赋值的方式_spring boot 学习笔记5(application.yaml 配置文件)...