|
|
本帖最后由 laoliu1982 于 2013-2-22 11:24 编辑
题外话:
之前发过enc28J60+乐联网app 的arduino控制例子(http://www.geek-workshop.com/thread-3099-1-1.html)
一段时间的使用发现如下问题:
ethercardd 软件实现简单ip 协议栈的方式,对于了解tcp/ip 各层协议数据封装模式确实很好。但是由于arduino资源极其有限,用软件方式来实现ip协议栈不一定合理(最主要是无法提供类似socket的编程模式),加之长期数据发送的时候总是会随机的中断(W5100就没事),感觉arduino选择搭配w5100还是有道理的。
转回正题:这回发的帖子字多,图少了。
通过我们提供的app 对arduino(W5100)实现控制(限同一网段内,不同网段方法后面介绍)。
亮点:整个代码用户只需要定义两个地方就可以
- /* 用户代码1 :根绝dev id 做相关控制操作 */
- virtual bool updateValue(char* id,int val)
-
- {
-
- Serial.print("dev id = ");
- Serial.println(id);
- if(!strcmp(id,"DA"))
- {
- Serial.println("handle da routin"); //可以结合val 定义自己的操作
- }
- if(!strcmp(id,"DA2"))
- {
- Serial.println("handle da2 routin"); //可以结合val 定义自己的操作
- }
- Serial.print("update actuator ");
-
- Serial.println(val);
-
- led=val;
-
- return val;
-
- }
- /* 用户代码1结束 */
复制代码
- /* 用户代码2 :注册 DA DA2 两个执行设备 */
- dummy_act the_act("DA", "dummy actuator", "dummy-da");
- dummy_act the_act2("DA2", "dummy actuator", "dummy-da2");
- /* 用户代码2 结束 */
复制代码
实验步骤:
1 注册一个乐联网账号(这个现在跳不过,因为登陆app需要,以后考虑提供一个不用注册登陆的app版本)
open.lewei50.com
2 下载乐联网app http://open.lewei50.com/home/sitecontent/ydkhd
3 leweiclient下载: 导入arduino library
4 登陆乐联网用户,建立网关,配置arduino内网地址 (这里不能用dhcp模式,因为后面还会介绍怎么在不同网段实现arduino的控制,比如你用3G上网,控制家里路由器下面的arduino)设置方法见 http://open.lewei50.com/home/news/90
5 实现代码:
实现代码:
- #include <LeweiClient.h>
- #include <SPI.h>
- #include <Ethernet.h>
- #include <Wire.h> //BH1750 IIC Mode
-
- #define LW_USERKEY "8xxxx05"
- #define LW_GATEWAY "01"
-
- #define MY_NAME "UNO1"
- #define MY_DESC "UNO test case"
- #define MY_ADDR "http://192.168.1.233/api"
-
- //delay between updates
- #define POST_INTERVAL (10*1000)
-
- LeWeiClient *lwc;
-
- const unsigned long postingInterval = 10*1000;
-
-
-
- class dummy_act: public LeWeiActuator
-
- {
-
- private:char led;
-
- public:
-
- dummy_act(
-
- const char *id,
-
- const char *type,
-
- const char *name) : LeWeiActuator(id, type, name)
-
- {};
-
- /* 用户代码1 :根绝dev id 做相关控制操作 */
- virtual bool updateValue(char* id,int val)
-
- {
-
- Serial.print("dev id = ");
- Serial.println(id);
- if(!strcmp(id,"DA"))
- {
- Serial.println("handle da routin");
- }
- if(!strcmp(id,"DA2"))
- {
- Serial.println("handle da2 routin");
- }
- Serial.print("update actuator ");
-
- Serial.println(val);
-
- led=val;
-
- return val;
-
- }
- /* 用户代码1结束 */
-
- virtual bool getValue(int *val)
-
- {
-
- static int i = 0;
-
- *val = led;
-
- return true;
-
- }
-
- };
-
- /* 用户代码2 :注册 DA DA2 两个执行设备 */
- dummy_act the_act("DA", "dummy actuator", "dummy-da");
- dummy_act the_act2("DA2", "dummy actuator", "dummy-da2");
- /* 用户代码2 结束 */
- void setup() {
- Serial.begin(9600);
-
- uint8_t mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
- #if 1
- IPAddress myip(192, 168, 1, 233);
- IPAddress dnsip(8, 8, 8, 8);
- IPAddress gateway(192, 168, 1, 253);
- Ethernet.begin(mac, myip, dnsip, gateway);
- #else
- if (Ethernet.begin(mac) == 0)
- {
- Serial.print(F("Failed to configure Ethernet using DHCP "));
- }
- else
- {
- Serial.print(F("Ethernet configuration OK "));
- }
- #endif
-
- // hope no exception here
- lwc = new LeWeiClient(LW_USERKEY, LW_GATEWAY,
- MY_NAME, MY_DESC, MY_ADDR, LeWeiClient::none);
-
-
-
- lwc->registerActuator(the_act);
- lwc->registerActuator(the_act2);
-
- Serial.print(lwc->nrSensors());
- Serial.println(F(" sensors registered."));
- Serial.print(lwc->nrActuators());
- Serial.println(F(" actuators registered."));
-
- lwc->initDevices();
-
- lwc->beginServe(80);
-
- Serial.println(F("upload gateway info to server"));
- int retry = 10;
- while (lwc->uploadInfo() < 0 && --retry)
- {
- delay(1000);
- }
- if (!retry)
- Serial.println(F("uploadInfo failed in 10 times"));
- else
- Serial.println(F("uploadInfo done"));
- }
-
- void loop() {
- static unsigned int loop_count;
- if (lwc) {
- loop_count++;
-
- Serial.print(F("*** loop nr: "));
- Serial.println(loop_count);
- /*
- *Serial.print(F("*** start log send "));
- *lwc->sendLog("I'm alive.");
- */
- //delay(POST_INTERVAL);
- Serial.println(F("*** serve"));
- for (int i = 0; i < 100; i++) {
- lwc->serve();
- delay(100);
- }
- }
-
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|