自己 发表于 2012-9-22 19:46:19

arduino+linkspite(Diamondback)+yeelink数据上传出现问题!!

仿照linkspite中的simpletweet的例子我修改了函数库里Wiserver.cpp/request.cpp/string.c这几个文件,自认为在http协议方面没有出错,但还是不能向yeelink发送数据,求大神指点一下
附上代码以及linkspite



迷你强 发表于 2012-9-23 08:27:28

帮顶等高手

zcbzjx 发表于 2012-9-23 13:11:18

post的头文件放哪儿了?

自己 发表于 2012-9-23 18:52:04

zcbzjx 发表于 2012-9-23 13:11 static/image/common/back.gif
post的头文件放哪儿了?

不是request.cpp中的函数完成post的功能吗?

zcbzjx 发表于 2012-9-24 01:51:58

自己 发表于 2012-9-23 18:52 static/image/common/back.gif
不是request.cpp中的函数完成post的功能吗?

至少没加“U-ApiKey: xxxxxxxxxxxxxx”进去

自己 发表于 2012-9-26 12:59:34

zcbzjx 发表于 2012-9-24 01:51 static/image/common/back.gif
至少没加“U-ApiKey: xxxxxxxxxxxxxx”进去

char* auth = "285eff467ef4a7576a748ba0ee4e8954";在yeelinktest.ino里
        if (req->auth) {
                WiServer.print_P(apikey);
                WiServer.println(req->auth);
        }在Wiserver.cpp里

自己 发表于 2012-9-26 13:04:46

zcbzjx 发表于 2012-9-24 01:51 static/image/common/back.gif
至少没加“U-ApiKey: xxxxxxxxxxxxxx”进去

char* auth = "285eff467ef4a7576a748ba0ee4e8954";在yeelinktest.ino里
        if (req->auth) {
                WiServer.print_P(apikey);
                WiServer.println(req->auth);
        }在Wiserver.cpp里

zcbzjx 发表于 2012-9-26 13:41:39

前面的"U-ApiKey:"在哪儿?"U-ApiKey: 285eff467ef4a7576a748ba0ee4e8954"应该在头文件内吧,没看见你构建

自己 发表于 2012-9-26 18:15:26

zcbzjx 发表于 2012-9-26 13:41 static/image/common/back.gif
前面的"U-ApiKey:"在哪儿?"U-ApiKey: 285eff467ef4a7576a748ba0ee4e8954"应该在头文件内吧,没看见你构建

WiServer.print_P(apikey);就是这句

zcbzjx 发表于 2012-9-26 18:48:21

自己 发表于 2012-9-26 18:15 static/image/common/back.gif
WiServer.print_P(apikey);就是这句

在string.c中找到了定义。。。不知道了,同求高手解答。。。

自己 发表于 2012-9-26 22:24:34

zcbzjx 发表于 2012-9-26 18:48 static/image/common/back.gif
在string.c中找到了定义。。。不知道了,同求高手解答。。。

啊,你也不知道。。。

zcbzjx 发表于 2012-9-27 05:54:38

把你的模块给我,我帮你调试,hoho,我没这个模块,没法测试{:soso_e120:}

自己 发表于 2012-9-27 21:23:18

zcbzjx 发表于 2012-9-27 05:54 static/image/common/back.gif
把你的模块给我,我帮你调试,hoho,我没这个模块,没法测试

我去问问我们同学他同意就送你~~

erjiang 发表于 2012-10-7 09:17:56

给你贴一段能用的代码吧。#include <SoftwareSerial.h>

/*
* Web Client
*
* A simple web client example using the WiShield 1.0
*/

#include <WiShield.h>

#define WIRELESS_MODE_INFRA        1
#define WIRELESS_MODE_ADHOC        2

// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,42,2};        // IP address of WiShield
unsigned char gateway_ip[] = {192,168,42,1};        // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0};        // subnet mask for the local network
const prog_char ssid[] PROGMEM = {"AndroidAP"};                // max 32 bytes

unsigned char security_type = 3;        // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"qwertyuiop"};        // max 64 characters

// WEP 128-bit keys
// sample HEX keys
prog_uchar wep_keys[] PROGMEM = {        0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,        // Key 0
                                                                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00,        // Key 1
                                                                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00,        // Key 2
                                                                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00        // Key 3
                                                                };

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;



//---------------------------------------------------------------------------

void setup()
{
      Serial.begin(9600);
        WiFi.init();

}

unsigned char loop_cnt = 0;

// The stack does not have support for DNS and therefore cannot resolve
// host names. It needs actual IP addresses of the servers. This info
// can be obtained by executing, for example, $ ping twitter.com on
// a terminal on your PC
//char google_ip[] = {74,125,67,100};        // Google
//char twitter_ip[] = {202,136,56,203};        // Twitter
char twitter_ip[] = {202,136,56,203};        // yeelink

// This string can be used to send a request to Twitter.com to update your status
// It will need a valid Authorization string which can be derived from your
// Twitter.com username and password using Base64 algorithm
// See, http://en.wikipedia.org/wiki/Basic_access_authentication
// You need to replace <-!!-Authorization String-!!-> with a valid string before
// using this sample sketch.
// The Content-Length variable should equal the length of the data string
// In the example below, "Content-Length: 21" corresponds to "status=Ready to sleep"
//const prog_char twitter[] PROGMEM = {"POST /statuses/update.xml HTTP/1.1\r\nAuthorization: Basic <-!!-Authorization String-!!->\r\nUser-Agent: uIP/1.0\r\nHost: twitter.com\r\nContent-Length: 21\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nstatus=Ready to sleep"};
const prog_char twitter[] PROGMEM = {"POST /v1.0/device/113/sensor/393/datapoints HTTP/1.1 \r\nHost: api.yeelink.net\r\nU-ApiKey: 4bb0814c782a074e99e2e3c586bc6963\r\nContent-Length: 13\r\nConnection: close\r\n\r\n{\"value\":456}\r\n"};

void loop()
{
        // if this is the first iteration
        // send the request
        if (loop_cnt == 0) {
                Serial.println(twitter);
                webclient_get(twitter_ip, 80, "/");

                loop_cnt = 1;
        }
       
        WiFi.run();
}

erjiang 发表于 2012-10-7 09:19:49

需要注意的几点,
1. 注意wifi的加密方式和网络结构
2. 注意组装好要发送的http包的字符串结构
3. 尽量避免修改基础的函数,尽量从外面调用,避免对其他程序构成影响(基础函数可能被其他函数调用)
页: [1] 2
查看完整版本: arduino+linkspite(Diamondback)+yeelink数据上传出现问题!!