7199浏览
查看: 7199|回复: 9

[已解决] 请教技术支持,关于Wido联网稳定性问题。

[复制链接]
硬件为Wido+I/O扩展板+[size=12.727272033691406px]LM35线性模拟温度传感器
程序为样例Wido2Yeelink

刚开始串口窗中,每隔一次温度数据上传会返回一个错误提示,如下:
3c
{"error":"TOO FREQUENTLYREQUESTS (INTERVAL MORE THAN 10S)"}
因此将程序中延时2S改为延时10(好像改15S有问题),如下:
if(WidoClient.connected() &&millis() - uploadtStamp > 10000){
再调试则无此报错。

但一直出现数据上传约2-3小时后在yeelink端无数据并且显示传感器异常,需要重启Wido才能恢复正常,但问题反复未解决。

请问是硬件还是软件问题?如何解决?

szftrm  中级技匠
 楼主|

发表于 2015-7-1 09:00:10

改延时,开始想改15秒,但好像编译过不去,最后设了10秒。
回复

使用道具 举报

Cain  初级技匠

发表于 2015-7-1 10:04:08

2~3小时候运行wido芯片是否发烫?过热可以考虑加散热片。15s应该是可以的,是不是哪里没一起改掉
回复

使用道具 举报

szftrm  中级技匠
 楼主|

发表于 2015-7-1 10:08:53

Cain 发表于 2015-7-1 10:04
2~3小时候运行wido芯片是否发烫?过热可以考虑加散热片。15s应该是可以的,是不是哪里没一起改掉 ...

温度正常
回复

使用道具 举报

szftrm  中级技匠
 楼主|

发表于 2015-7-1 18:12:21

:'(技术客服呢?!都一整天了,没个解决问题的意见?!
回复

使用道具 举报

Cain  初级技匠

发表于 2015-7-2 00:43:00

"15s应该是可以的,是不是哪里没一起改掉,"甚至说间隔可以再长点,,软件可以增加看门狗定时自动重启删除冗余。arduino本来就不像51有很强的稳定性
回复

使用道具 举报

szftrm  中级技匠
 楼主|

发表于 2015-7-2 09:12:57

本帖最后由 szftrm 于 2015-7-2 09:14 编辑
Cain 发表于 2015-7-2 00:43
"15s应该是可以的,是不是哪里没一起改掉,"甚至说间隔可以再长点,,软件可以增加看门狗定时自动重启删除冗 ...

/*
This example code is used to connect the Yeelink cloud service (Official homepage: www.yeelink.net).

The device required is just:

1. LM35 low cost temperature sensor or any device you used to upload data
2. And Wido

Note: Please don't forget to change the setting below before using!
1. WLAN_SSID & WlAN_PASS
2. API_key
3. device ID & sensor ID

*/


#include <Adafruit_CC3000.h>
#include <ccspi.h>
#include <SPI.h>
#define Wido_IRQ   7
#define Wido_VBAT  5
#define Wido_CS    10

Adafruit_CC3000 Wido = Adafruit_CC3000(Wido_CS, Wido_IRQ, Wido_VBAT,
SPI_CLOCK_DIVIDER); // you can change this clock speed
// Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2
#define WLAN_SECURITY   WLAN_SEC_WPA2


#define WLAN_SSID       "myNetwork"           // cannot be longer than 32 characters!
#define WLAN_PASS       "myPassword"          // For connecting router or AP, don't forget to set the SSID and password here!!


#define TCP_TIMEOUT      3000
//#define CC3000_TINY_DRIVER

#define WEBSITE  "api.yeelink.net"
#define API_key  "733115abefe88b0033c035ac9e000000"  // Update Your API Key. To get your API Key, please check the link below
// http://www.yeelink.net/user/user_profile

void setup(){
        
        Serial.begin(115200);
        Serial.println(F("Hello, CC3000!\n"));
        
        /* Initialise the module */
        Serial.println(F("\nInitialising the CC3000 ..."));
        if (!Wido.begin())
        {
                Serial.println(F("Unable to initialise the CC3000! Check your wiring?"));
                while(1);
        }
        
        /* Attempt to connect to an access point */
        char *ssid = WLAN_SSID;             /* Max 32 chars */
        Serial.print(F("\nAttempting to connect to "));
        Serial.println(ssid);
        
        /* NOTE: Secure connections are not available in 'Tiny' mode!
        By default connectToAP will retry indefinitely, however you can pass an
        optional maximum number of retries (greater than zero) as the fourth parameter.
        */
        if (!Wido.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {
                Serial.println(F("Failed!"));
                while(1);
        }
        
        Serial.println(F("Connected!"));
        
        /* Wait for DHCP to complete */
        Serial.println(F("Request DHCP"));
        while (!Wido.checkDHCP())
        {
                delay(100); // ToDo: Insert a DHCP timeout!
        }
        
}

uint32_t ip = 0;
float temp = 0;

void loop(){
        
        static Adafruit_CC3000_Client WidoClient;
        static unsigned long RetryMillis = 0;
        static unsigned long uploadtStamp = 0;
        static unsigned long sensortStamp = 0;
        
        if(!WidoClient.connected() && millis() - RetryMillis > TCP_TIMEOUT){
                // Update the time stamp
                RetryMillis = millis();
               
                Serial.println(F("Try to connect the cloud server"));
                WidoClient.close();
               
                // Get Yeelink IP address
                Serial.print(F("api.yeelink.net -> "));
                while  (ip  ==  0)  {
                        if  (!Wido.getHostByName(WEBSITE, &ip))  {    //  Get the server IP address based on the domain name
                                Serial.println(F("Couldn't resolve!"));
                        }
                        delay(500);
                }
                Wido.printIPdotsRev(ip);
                Serial.println(F(""));
               
                // Connect to the Yeelink Server
                WidoClient = Wido.connectTCP(ip, 80);          // Try to connect cloud server
        }
        
        if(WidoClient.connected() && millis() - uploadtStamp > 10000){
                uploadtStamp = millis();
                // If the device is connected to the cloud server, upload the data every 10s.
               
                // Prepare Http Package for Yeelink & get length
                int length = 0;
                char lengthstr[3];
               
                // Create Http data package
                char httpPackage[60] = "";
               
                strcat(httpPackage,"{\"value\":");
                        itoa(temp,httpPackage+strlen(httpPackage),10);          // push the data(temp) to the http data package
                strcat(httpPackage,"}");
               
                length = strlen(httpPackage);                           // get the length of data package
                itoa(length,lengthstr,10);                              // convert int to char array for posting
                Serial.print(F("Length = "));
                Serial.println(length);
               
                Serial.println(F("Connected to Yeelink server."));
               
                // Send headers
                Serial.print(F("Sending headers"));
               
                WidoClient.fastrprint(F("POST /v1.0/device/"));
                WidoClient.fastrprint(F("100/sensor/20/datapoints"));  //Please change your device ID and sensor ID here, after creating
                //Please check the link: http://www.yeelink.net/user/devices
                //The example URL: http://api.yeelink.net/v1.0/device/100/sensor/20/datapoints
                WidoClient.fastrprintln(F(" HTTP/1.1"));
                Serial.print(F("."));
               
                WidoClient.fastrprintln(F("Host: api.yeelink.net"));
                Serial.print(F("."));
               
                WidoClient.fastrprint(F("U-ApiKey: "));
                WidoClient.fastrprintln(API_key);
                Serial.print(F("."));
               
                WidoClient.fastrprint("Content-Length: ");
                WidoClient.fastrprintln(lengthstr);
                WidoClient.fastrprintln("");
                Serial.print(F("."));
               
                Serial.println(F(" done."));
               
                // Send data
                Serial.print(F("Sending data"));
                WidoClient.fastrprintln(httpPackage);
               
                Serial.println(F(" done."));
               
                /********** Get the http page feedback ***********/
               
                unsigned long rTimer = millis();
                Serial.println(F("Reading Cloud Response!!!\r\n"));
                while (millis() - rTimer < 10000) {
                        while (WidoClient.connected() && WidoClient.available()) {
                                char c = WidoClient.read();
                                Serial.print(c);
                        }
                }
                delay(1000);             // Wait for 1s to finish posting the data stream
                WidoClient.close();      // Close the service connection
               
                RetryMillis = millis();  // Reset the timer stamp for applying the connection with the service
        }
        
        if(millis() - sensortStamp > 2000){
                sensortStamp = millis();
                // read the LM35 sensor value and convert to the degrees every 100ms.
               
                int reading = analogRead(0);
                temp = reading *0.0048828125*100;
                Serial.print(F("Real Time Temp: "));
                Serial.println(temp);
        }
}
都没怎么改动过。另看门狗加那里/
回复

使用道具 举报

Cain  初级技匠

发表于 2015-7-2 10:20:35

请教技术支持,关于Wido联网稳定性问题。图1,改个数字而已啊,怎么会报错?
回复

使用道具 举报

Cain  初级技匠

发表于 2015-7-2 10:47:36

要么使用内置看门狗http://www.geek-workshop.com/thread-2413-1-1.html,要不就用专用的芯片DS1232,比较推荐后一个
回复

使用道具 举报

szftrm  中级技匠
 楼主|

发表于 2015-7-2 11:41:49

Cain 发表于 2015-7-2 10:47
要么使用内置看门狗http://www.geek-workshop.com/thread-2413-1-1.html,要不就用专用的芯片DS1232,比较 ...

thanks!!
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail