Light-Microduino初探
本帖最后由 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都外链了。
#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;
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, "POST") !=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"
"Pragma: 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());
}
}
来个视频,连线很简单哈,叠加-core+模块、-enc28j60模块、-ft232模块 D7和GND分别连接到一个贴片LED的2端(我没led模块,做实验一般采用别的模块的pwr指示led,视频中采用的是-core模块的pwr指示led,很多同学说火机大哈,实际是模块小哈,hoho)。
http://v.youku.com/v_show/id_XNTI0MTAwNTE2.html
还有很多工作要做。。下一步是把控制信息通过-nRF24模块 传送到子端,再下一步是大功率led驱动芯片的选型,再再下一步。。。。hoho
楼主你的下一步是想量产么? 蓝色布鲁斯 发表于 2013-3-10 10:29 static/image/common/back.gif
楼主你的下一步是想量产么?
不量产哦,主板只是集成microduino模块。。玩的,做产品,俺水平严重不够啊。。 LZ整个,jquery UI教程吧 又好玩,又好用的arduino 电源插头 发表于 2013-3-10 10:53 static/image/common/back.gif
LZ整个,jquery UI教程吧
这个。。jquery 有专门的教程吧。。俺也是二把刀。。真心整不出来
有两个错误
Serial.ptint("brightness=");
Serial.println(brightness);
Serial.ptint("(lightStatus="); 本帖最后由 Hyperion·抽筋 于 2013-3-10 16:47 编辑
其实不是库的脚本(自定义的脚本)应该丢在</boby>之前... 忘记和张老师说了{:soso_e149:} ...
jQueryUI文档, 请猛戳这里 http://api.jqueryui.com/ .
jQuery基础, 请戳这里 http://api.jquery.com/ .
不推荐中文的文档, 有些质量特别低劣, 就是拼凑起来的东西. txmg 发表于 2013-3-10 14:16 static/image/common/back.gif
有两个错误
Serial.ptint("brightness=");
Serial.println(brightness);
俺后加的,拼写错了,俺改 Hyperion·抽筋 发表于 2013-3-10 16:46 static/image/common/back.gif
其实不是库的脚本(自定义的脚本)应该丢在之前... 忘记和张老师说了 ...
jQueryUI文档, 请猛 ...
。。。这个。。。暂时不改了,以后写脚本的时候改 mark一下,好像正好是我需要的。
页:
[1]