mingche 发表于 2014-3-9 09:48:29

arduino+enc82j60+yeelink

小弟刚学arduino没有多久,所以不对的地方,希望各位大神能够多多的指点,事情是这样子的,最近需要做一个远程监控温度的系统,可能大家已经做的都烂了,我选择的是yeelink(主要是因为有苹果端),查看上面的例子,一看基本上都是W5100的例子,可是手头只有82J60的,所以自己根据各位大神的贴子,改成了82J60的代码,分享给大家,代码后面我会备注出来的,有不对的地方,希望大家多多指点!
#include <EtherCard.h>//引用28J60的库
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };//MAC地址
static byte ip[]={192,168,18,10};//分配的IP地址
static byte gateway[]={192,168,18,1};//网关地址
static byte dns[]={202,96,64,68};//DNS
char website[] PROGMEM = "api.yeelink.net";//服务器的地址
char urlBuf[] PROGMEM = "/v1.0/device/xxx1/sensor/xxx2/datapoints";//Yeelink的传感器的地址,XXX1为设备的ID,XXX2为传感器的ID,
int pin=5;
byte Ethernet::buffer;
static uint32_t timer;
static void my_callback (byte status, word off, word len) {//服务器返回来的数据进行处理
String s=(const char*) Ethernet::buffer + off+311;//311这个数是自己测试得来的,把前311个字符全都屏蔽掉
if (s.length() !=0)
{
    if (s.charAt(s.length() - 2) == '1') {//如果服务器传回来的状态是1,则端口5电平为HIGH
      Serial.println("turn on the LED");
      digitalWrite(pin, HIGH);
    }
      else if(s.charAt(s.length() - 2) == '0') {//如果服务器传回来的状态是0,则端口5电平为LOW
      Serial.println("turn off the LED");
      digitalWrite(pin, LOW);
    }
   
}
void setup () {
Serial.begin(9600);
if (!ether.begin(sizeof Ethernet::buffer, mymac,10))
    Serial.println( "Failed to access Ethernet controller");
    else
    Serial.println("Ethernet controller done");
ether.staticSetup(ip,gateway,dns);//分配静态IP地址
if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
pinMode(13,OUTPUT);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
    timer = millis() + 5000;
    ether.browseUrl(urlBuf, "", website, my_callback);
}
}

瘦网虫 发表于 2014-3-10 13:29:45

支持分享~:lol

接线图最好也说下

ggc18 发表于 2014-4-7 23:46:41

本人小白,能不能多路开关+多路路模拟一起用啊
页: [1]
查看完整版本: arduino+enc82j60+yeelink