本帖最后由 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网络模块会出现奇怪的问题相关推荐

  1. mysql创建触发器难题_[]MYSQL创建触发器遇到很奇怪的有关问题

    [求助]mysql创建触发器遇到很奇怪的问题. 今天遇到一个很奇怪的问题,是关于创建触发器的.创建触发器代码如下 SQL code create trigger trigger_t_test_U af ...

  2. linux下w5500驱动程序,W5500驱动函数库.pdf

    W5500驱动函数库 W5500 驱动函数库 /**************************************************************************** ...

  3. mysql查询错误_一个奇怪的MySQL查询错误

    t_user表的phone_number字段是varchar(255)类型的,表示手机号, 在查询某个手机号时,sql语句如下: SELECT phone_number  FROM t_user WH ...

  4. mysql 5.7 errmsg.sys,奇怪的MySql错误无法从messagefile中读取... errmsg.sys

    我试图在没有安装的情况下运行MySQL. 我下载了& Lt; mysql-5.7.20-macos10.12-x86_64.tar.gz& Gt;.在解压缩的文件夹中,我创建了一个文件 ...

  5. STM32驱动W5500连接腾讯云

    STM32驱动W5500连接腾讯云 1.W5500简介    W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案. W5500 集成了 TCP/IP ...

  6. STM32 以太网W5500

    文章目录 W5500简介 以太网接入方案 SPI读写访问 寄存器以及地址 源码以及配置 实现 TCP Server 三次握手过程 SPI 配置 网络相关函数 W5500简介 W5500 是一款全硬件 ...

  7. STM32+W5500以太网模块

    一:w5500以太网模块介绍: W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方 案.W5500 集成了 TCP/IP 协议栈,10/100M 以太 ...

  8. STM32驱动W5500动态分配IP

    TM32驱动W5500动态分配IP 1.W5500简介    W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接方案. W5500 集成了 TCP/IP ...

  9. STM32之W5500网络通信

    STM32之W5500网络通信 一.W5500 二.DHCP 三.modbus 四.实现web服务 参考 一.W5500 Niren_W5500模块是一款基于WIZnet W5500芯片的以太网模块, ...

最新文章

  1. jar打包命令-指定主类一次搞定!
  2. c++几种智能指针比较
  3. Windows 7 SP1确实将有性能改进
  4. 自绘制View---------左右滑动刻度调频View
  5. Android取消EditText自动获取焦点默认行为
  6. 数据库面试题【六、Sql的优化】
  7. Spring Boot 整合 Shiro
  8. 开榨油店的失败教训_想开水果店没有经验?线下开水果店经营心得分享,或许你用得上...
  9. ETH联合Meta和鲁汶大学 提出视频恢复算法VRT,在视频超分辨率、去模糊和去噪性能达到SOTA...
  10. 笨办法学 Python · 续 练习 51:`lessweb`
  11. pandas python groupby_python – pandas groupby方法实际上是如何工作的?
  12. VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...
  13. apollo代码修改配置_灰度实战(四):Apollo配置中心(4)
  14. Mysql 配置文件常见配置
  15. “华为杯”山东理工大学第十一届 ACM程序设计竞赛 我不是股神
  16. b站《史上最全unity3D教程》笔记1-04
  17. 计算机课反思的作文600字,中考反思作文600字6篇
  18. 用C语言编写的骂人的软件,“骂人软件”再智能 暴力永远是暴力
  19. CV之ModelScope:基于ModelScope框架的人脸人像数据集利用DCT-Net算法实现人像卡通化图文教程之详细攻略
  20. 服务器显示时间差8个小时,服务器时间相差8小时 原因与解决方法

热门文章

  1. javascript CDATA
  2. 信息学奥赛一本通(1134:合法C标识符查)
  3. 图论 —— 图的连通性 —— 传递闭包
  4. 围圈报数(信息学奥赛一本通-T1334)
  5. 信息学奥赛C++语言:行李托运
  6. 8 SD配置-企业结构-分配-给公司代码分配销售组织
  7. 27 FI配置-财务会计-外币评估-定义评估方范围
  8. 尚硅谷_springcloud(2020新版 思维导图_全网最火SpringCloud2020全家桶教程
  9. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
  10. yaml 文件内部使用变量赋值的方式_spring boot 学习笔记5(application.yaml 配置文件)...