6
`在这个版本上原理一样,替换了原来的板子
(手机开门1.0)https://bbs.elecfans.com/jishu_920776_1_1.html
之所以这个叫3.0是因为在这个之前用的W5100来控制的,然后又用D1板子来获取网络,除了头文件定义和连接,后面写法完全一样,所以直接移植过来, W5100就没写了。毕竟WIFI不用网线连接到处移动都可以 只需要电源就ok
材料:
1)D1 ESP8266 12F*1(用arduino开发)
2)电路自己设计(在1.0板子链接里面有电路)
上个图D1正反面
这个就是W5100啦
还是先说说大概原理:
手机或电脑提交给网页一个信息,D1wifi板子一直获取网页的信息,来判断是否控制IO口;
中途遇到了那些情况:
引脚,先用w5100测试好了的代码,直接改到D1板子上面,(除了连接和头文件基本不用该代码),先用led来代替IO的电路,发现就2个正常的 其他的 都不对,发现板子后面还有个引脚定义,才换了位置IO还好刚刚够。(毕竟是8266 12F IO口没那么多)。
然后在公司里的笔记本用5v光耦隔离继电器的时候 低电平和高电平都没什么问题(电压低电平好像2v左右),
但是回家了用低电平触发继电器,还没触发继电器就滴答滴答(很快的节奏反复闭合),然后改用高电平触发试试,结果就正常了,其他暂时没什么问题了 。
代码修改过几次隔了2天没什么问题了,之前有隔一段时间,接收的数据为空(可能打开网页太频繁),网也打开一直出错,然后一直这样下去 所以修改了以下几点:
1加入隔随机秒数访问时间
2增加了确定执行后,再给网页提交一个信息 确定成功
#include
#include //修改1 加入随机数函数访问网页 以免造成黑名单
// 由于时间没多少 功能暂时实现了后面再优化 16-7-28
const int dg=16;//大门关 //修改2 接线优化位置
const int dk=5;//大门开
const int dt=4;//大门停
const int jy=12;//家音响
const int jfm=13;//家FM
const int jm=0;//门
const int mm=2;//总开关
int a=0;
String c="";//用来判断 控制输出
const char *ssid = "QQqun";//这里是连接你需要的wifi名字
const char *password = "272392941";//你要连接的wifi密码
const char *host = "www.xiaohe520.cn";//修改为你需要打开的域名 不能带目录
WiFiClient client;//初始化
String zifu="";//可以和变量c用一个 接收数据
int miao=1000;//定时访问
char www[]="www.xiaohe520.cn";
unsigned long newtime=0;//暂时没写 后面写
void setup()
{
pinMode(dg,OUTPUT);
pinMode(dk,OUTPUT);
pinMode(dt,OUTPUT);
pinMode(jy,OUTPUT);
pinMode(jfm,OUTPUT);
pinMode(jm,OUTPUT);
pinMode(mm,OUTPUT);
digitalWrite(jy,HIGH);
digitalWrite(jfm,HIGH);
digitalWrite(jm,HIGH);
digitalWrite(dg,HIGH);
digitalWrite(dt,HIGH);
digitalWrite(dk,HIGH);
digitalWrite(mm,HIGH);
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");//写几句提示,哈哈
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)//WiFi.status() ,这个函数是wifi连接状态,返回wifi链接状态
{
delay(500);
Serial.print(".");
}//如果没有连通向串口发送....
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());//WiFi.localIP()返回8266获得的ip地址
http();//一定先访问一次不然导致后面获取不到数据
}
void loop()
{
while(client.available()>0)//available()同ARDUINO,不解释了
{
char val = client.read();//read()同arduino
zifu=zifu+val;
}
//下面一段是找查最后一行的数据 提取出来
if(zifu.lastIndexOf('
')!=(-1))
{
zifu=zifu.substring(zifu.lastIndexOf('
')+1);
}
c=zifu;
iopd();
if(zifu!="")
{
Serial.println(c);
zifu="";
http();
}
else {Serial.println(zifu);
Serial.println("dengdaishujulianjie.....");
a++;
if(a>5){http();a=0;}
}
if (!client.connected())//几个非连接的异常处理
{
client.stop();
Serial.println("meilianjie....");
}
else
{Serial.println("client.connected.......");
miao=random(800,1300);//修改1 随机数函数
Serial.print(miao);
delay(miao);
}
}
void http(){
if(client.connect(www,80))
{
Serial.println("opening....");
client.println("POST /find/xiaohe2 HTTP/1.1");//提交的网页
client.println("HOST:www.xiaohe520.cn");//提交的服务器
client.println();
}
else{
Serial.println("open html error");//如果打开失败
}
}
void iopd()
{
if(c=="m"){
digitalWrite(jm,LOW);
delay(500);
digitalWrite(jm,HIGH);ok();
}
if(c=="y"){
digitalWrite(jy,LOW);
delay(500);
digitalWrite(jy,HIGH);ok();
}
if(c=="f"){
digitalWrite(jfm,LOW);
delay(500);
digitalWrite(jfm,HIGH);ok();
}
if(c=="t"){
digitalWrite(dt,LOW);
delay(500);
digitalWrite(dt,HIGH);ok();
}
if(c=="k"){
digitalWrite(dk,LOW);
delay(500);
digitalWrite(dk,HIGH);ok();
}
if(c=="g"){
digitalWrite(dg,LOW);
delay(500);
digitalWrite(dg,HIGH);
ok();
}
if(c=="on"){
digitalWrite(mm,LOW);
Serial.print("open...");
}
if(c=="off")
{
digitalWrite(mm,HIGH);
Serial.print("colse...");
}
}
//串口发送以后
void ok(){
if(client.connect(www,80))
{
Serial.println("wait...");
String t="POST /find/xiaohe/content/";
String t2=" HTTP/1.1";
client.print(t);
client.print(zifu);
client.print("ok..");
client.println(t2);
//client.println("POST /find/xiaohe/content/hehe HTTP/1.1");//第二种方法提交
//client.println("POST /find/xiaohe2 HTTP/1.1");//第二种方法提交
client.println("HOST:www.xiaohe520.cn");
client.println();
}
else{
Serial.println("open html error");//如果打开失败
}
}
如果有遗漏或不全的地方可以留言。毕竟一下子写全 是不太可能的,个人认为开发的人员 语言逻辑有点混乱的赶脚!
手机app截图
暂时差不多了,下班许久了 。。。
`
|
评分
-
查看全部评分
|