极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19514|回复: 10

Light-Microduino初探

[复制链接]
发表于 2013-3-10 10:15:50 | 显示全部楼层 |阅读模式
本帖最后由 zcbzjx 于 2013-3-10 17:33 编辑

Microduino的模块开发初步告一个段落,目前想用这些模块做一些应用,好久没写代码了,很生疏了。

这次想做一个LED吸顶灯的应用,初步是子端通过Microduino-nRF24模块-Core模块实现对10w左右的大功率LED网络控制,主板(命名为Light-Microduino)采用大功率LED的驱动芯片,PWM通过mos或者三极管扩流,对该驱动芯片进行调光控制,子端通过nRF24模块和网关进行通讯(接收网关的控制信号,上传子端的一些传感器信息比如LED铝基板的温度)。网关采用-nRF24模块和-ENC28J60模块-Core+模块,-nRF24模块和子端进行通讯,-ENC28J60模块连接到家庭无线路由器。这样就可以通过手机或者PC访问网关实现对吸顶灯的控制。



恩,不用说,大家也知道,这儿把网关作为了一个web服务器。为了减少通讯数据量,只在页面刷新的时候,更新客户端浏览器的整个页面,控制信息通过jquery UI(感谢大Q的建设性意见和破砖的手把手指导,jquery确实很方便)后台post到服务器,服务器接收post数据包,解码控制信息再通过nrf24把控制信号传送给子端。


恩,目前主要完成了控制界面的生成,希望对各位想用enc28j60做web服务器的朋友有所帮助。

直接代码把,补充一句,图片和jquery UI需要的js css都外链了。


[pre lang="arduino" line="1" file="Light-Microduino"]#include <EtherCard.h>

#define RELAY_PIN        7

// ethernet interface mac address
static byte mymac[] = {
  0x74,0x69,0x69,0x2D,0x30,0x31 };
// ethernet interface ip address
static byte myip[] = {
  192,168,1,8 };
// gateway ip address
static byte gwip[] = {
  192,168,1,254 };

byte Ethernet::buffer[2000];

char* on  = "ON";
char* off = "OFF";
char* imageLabel;
uint8_t brightness,lightStatus;

void setup () {

  Serial.begin(57600);
  Serial.println("Light Microduino");

  if(!ether.begin(sizeof Ethernet::buffer, mymac))
    Serial.println( "Failed to access Ethernet controller");
  else
    Serial.println("Ethernet controller initialized");

  if(ether.staticSetup(myip, gwip)){
    Serial.println("Set static IP ok!");
  }
  else{
    Serial.println("Set static IP Failed!");  
  }

  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);  
  brightness = 255;
  lightStatus = 0;
  imageLabel = off;
}

void loop() {

  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

  if(pos) {
    //Serial.println((char *)Ethernet::buffer + pos);
    if(strstr((char *)Ethernet::buffer + pos, "OST") !=0) {
      sscanf((char *)strstr((char *)Ethernet::buffer + pos, "brightness"),"brightness=%d&lightstatus=%d",&brightness,&lightStatus); //解码post数据包获取需要的控制信息,用sscanf()函数来得很方便。
      Serial.print("brightness=");
      Serial.println(brightness);
      Serial.print("lightStatus=");
      Serial.println(lightStatus);
      if(lightStatus){
        imageLabel=on;
      }
      else{
        imageLabel=off;
      }
    }
    if (lightStatus){
      analogWrite(RELAY_PIN, brightness);
    }
    else{
      digitalWrite(RELAY_PIN, LOW);
    }
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.1 200 OK\r\n"
      "Content-Type: text/html\r\n"
      "ragma: no-cache\r\n\r\n"
      "<!doctype html>"
      "<html lang=\"en\">"
      "<head><meta charset=\"utf-8\" /><meta name=\"viewport\" content=\"width=200px\"/>"
      "<title>Light-Microduino</title>"
      "<link rel=\"stylesheet\" href=\"http://code.jquery.com/ui/1.10.1/themes/base/jquery-ui.css\" />"
      "<script src=\"http://code.jquery.com/jquery-1.9.1.js\"></script>"
      "<script src=\"http://code.jquery.com/ui/1.10.1/jquery-ui.js\"></script>"
      "<script>"
      "$$(document).ready(function (){"
      "var status=$D;"
      "$$( \"#slider\" ).slider({"
      "animate: \"fast\",value: $D,min: 0,max: 255,step: 5,"
      "change: function( event, ui ) {"
      "$$.post(\"\",{\"brightness\"$(\"#slider\").slider(\"value\"),\"lightstatus\":status});"
      "}"
      "});"
      "$$(\"#button\").click(function(){"
      "if(status==0){"
      "$$(this).css(\"background\",\"url('http://test.microduino.net/ON.jpg')\");"
      "status=1;"
      "}else{"
      "$$(this).css(\"background\",\"url('http://test.microduino.net/OFF.jpg')\");"
      "status=0;"
      "}"
      "$$.post(\"\",{\"brightness\"$(\"#slider\").slider(\"value\"),\"lightstatus\":status});"
      "});"
      "});"
      "</script>"
      "</head><body style=\"background-color:black\";>"
      "<div style=\"position:absolute;width:200px;height:200px;top:50%;left:50%;margin:-100px 0 0 -100px\">"
      "<div style=\"font:bold 14px verdana;text-align:center\"><div id=\"slider\"></div><br/>"
      "<br/><button type=\"button\" id=\"button\" style=\"background:url('http://test.microduino.net/$S.jpg');border-style:none;width:128px;height:128px;background-repeat:no-repeat;\"/>"
      "</div></div></body></html>"),lightStatus,brightness,imageLabel);

    ether.httpServerReply(bfill.position());
  }
}[/code]

来个视频,连线很简单哈,叠加-core+模块、-enc28j60模块、-ft232模块 D7和GND分别连接到一个贴片LED的2端(我没led模块,做实验一般采用别的模块的pwr指示led,视频中采用的是-core模块的pwr指示led,很多同学说火机大哈,实际是模块小哈,hoho)。


还有很多工作要做。。下一步是把控制信息通过-nRF24模块 传送到子端,再下一步是大功率led驱动芯片的选型,再再下一步。。。。hoho
回复

使用道具 举报

发表于 2013-3-10 10:29:51 | 显示全部楼层
楼主你的下一步是想量产么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-10 10:31:00 | 显示全部楼层
蓝色布鲁斯 发表于 2013-3-10 10:29
楼主你的下一步是想量产么?

不量产哦,主板只是集成microduino模块。。玩的,做产品,俺水平严重不够啊。。
回复 支持 反对

使用道具 举报

发表于 2013-3-10 10:53:26 | 显示全部楼层
LZ整个,jquery UI教程吧
回复 支持 反对

使用道具 举报

发表于 2013-3-10 11:01:39 | 显示全部楼层
又好玩,又好用的arduino
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-10 14:07:21 | 显示全部楼层
电源插头 发表于 2013-3-10 10:53
LZ整个,jquery UI教程吧

这个。。jquery 有专门的教程吧。。俺也是二把刀。。真心整不出来
回复 支持 反对

使用道具 举报

发表于 2013-3-10 14:16:16 | 显示全部楼层
有两个错误
Serial.ptint("brightness=");
      Serial.println(brightness);
Serial.ptint("(lightStatus=");
回复 支持 反对

使用道具 举报

发表于 2013-3-10 16:46:03 | 显示全部楼层
本帖最后由 Hyperion·抽筋 于 2013-3-10 16:47 编辑

其实不是库的脚本(自定义的脚本)应该丢在</boby>之前... 忘记和张老师说了{:soso_e149:} ...

jQueryUI文档, 请猛戳这里 http://api.jqueryui.com/ .
jQuery基础, 请戳这里 http://api.jquery.com/ .

不推荐中文的文档, 有些质量特别低劣, 就是拼凑起来的东西.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-10 17:32:58 | 显示全部楼层
txmg 发表于 2013-3-10 14:16
有两个错误
Serial.ptint("brightness=");
      Serial.println(brightness);

俺后加的,拼写错了,俺改
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-10 17:34:48 | 显示全部楼层
Hyperion·抽筋 发表于 2013-3-10 16:46
其实不是库的脚本(自定义的脚本)应该丢在之前... 忘记和张老师说了 ...

jQueryUI文档, 请猛 ...

。。。这个。。。暂时不改了,以后写脚本的时候改
回复 支持 反对

使用道具 举报

发表于 2013-9-29 14:35:34 | 显示全部楼层
mark一下,好像正好是我需要的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-14 23:44 , Processed in 0.041514 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表