极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 43912|回复: 18

【终极版】ESP8266远程控制wifi透传模块带调试app

[复制链接]
发表于 2016-1-27 11:54:55 | 显示全部楼层 |阅读模式
本帖最后由 ITEAD创易工作室 于 2016-4-22 09:23 编辑

你好,2016!ITEAD给大家带来新年的第一帖!发财贴!


为什么说是发财贴呢?今天要介绍给大家的是一款成品级的wifi远程串口透传模块,各种智能家居方案唾手可得!



这是一款使用ESP8266高度集成的通用串口wifi透传模块,可以用于快速开发智能远程控制设备。只需要简单的串口通信开发,即可实数据的传输和控制。





该模块出厂已烧写好固件,配置好wifi后会自动连接到我们的亚马逊全球服务器,调试app在安卓市场搜索“酷宅云调试”即可下载安装。



接下来,开始介绍今天的教程:远程点亮arduino的LED。

硬件接线示意图如下:


硬件接线实物图如下:



uno烧写代码:

  1. int led_pin = 11;
  2. //定义一个10字节的整型数据变量cmd作为命令,这里可以修改为不同的数字。此处设置为10是为了有更好的兼容性。
  3. char cmd[10];
  4. //判断收到的cmd是否有内容
  5. bool valid_cmd = false;

  6. void setup()
  7. {
  8.     //定义连接led的引脚为输出信号
  9.     pinMode(led_pin, OUTPUT);
  10.     Serial.begin(9600);
  11. }
  12. void loop()
  13. {
  14.     /*以下部分是串口信息处理过程*/
  15.     //定义一个整数型变量i
  16.     int i;
  17.     //如果串口收到有数据
  18.     if (Serial.available() > 0)
  19.     {
  20.         //变量i最大为10
  21.         for (i = 0; i < 10; i++)
  22.         {
  23.         //清空缓存,存入cmd变量,并以\0作为结束符
  24.             cmd[i] = '\0';
  25.         }  
  26.         //此时i只能取前9位,第10位是结束符\0
  27.         for (i = 0; i < 9; i++)
  28.         {  
  29.             //再次判断串口如果收到有数据,防止数据丢失
  30.             if (Serial.available() > 0)
  31.             {
  32.                 //给变量cmd赋值,取串口收到的前9位字符
  33.                 cmd[i] = Serial.read();
  34.                 delay(1);
  35.             }
  36.             else
  37.             {
  38.                 //如果串口数据超过9位,后面的字符直接忽略,跳到下一步
  39.                 break;
  40.             }
  41.         }
  42.     /*以上串口信息处理结束*/
  43.    
  44.         //得到最终变量cmd的有效值
  45.         valid_cmd = true;
  46.     }
  47.    
  48.     //判断变量cmd的值,开始处理
  49.     if (valid_cmd)
  50.     {
  51.         //如果变量cmd的前2位的值是on
  52.         if (0 == strncmp(cmd, "on", 2))
  53.         {
  54.             //则连接led的引脚电压被置高5V,
  55.             digitalWrite(led_pin, HIGH);
  56.             //串口打印返回值ON,表示ON的操作执行成功
  57.             Serial.println("ON");
  58.         }
  59.         else if (0 == strncmp(cmd, "off", 3)) //否则如果变量cmd的前3位的值是off
  60.         {
  61.             //则连接继电器的引脚电压被置低0V,灯的电路被断开,灯灭
  62.             digitalWrite(led_pin, LOW);
  63.             //串口打印返回值F,表示OFF的操作执行成功
  64.             Serial.println("OFF");
  65.         }
  66.         else //如果以上两个条件都不成立,前2位不是ON,或者前3位不是OFF,即不正确的命令
  67.         {
  68.             //仅串口打印返回值X,表示指令错误。
  69.             Serial.println("X");
  70.         }
  71.         //到此,变量cmd的指令被处理完毕
  72.         valid_cmd = false;
  73.     }
  74.     //延迟10毫秒,返回loop主程序继续读取新的串口指令
  75.     delay(10);

  76. }
复制代码


添加设备和发送开关命令:



模块上的绿灯长亮,表示已经连接到服务器,可以正常工作。


发送“on”即可点亮LED,发送“off”即可关闭LED。模块同时也会回馈执行状态“ON”和"OFF",或者指令错误“X”



每个伟大的工程都是从blink开始的!智能家居就这么简单,期待坛友们伟大的成功!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2016-4-22 09:29:07 | 显示全部楼层
近来还会收到很多朋友的咨询“如何传温湿度?”“如何发送数据到手机?”
在这里统一回复:请先仔细看教程代码关于回传部分“Serial println”,数据都是通过串口直接收发的。教程的返回开关状态“ON”"OFF""X"就是你想要回传的数据。现在知道怎么传数据到手机了吗?
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-1-31 10:35:52 | 显示全部楼层
林定祥 发表于 2016-1-29 19:08
与ap匹配的ssid和password在程序中哪儿设置呢?

使用设备自发现机制,app自动搜索设备热点,并自动连接到设备,然后在app中第二步输入你家的SSID和密码即可让设备连到路由器并联网。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-1-27 17:58:18 | 显示全部楼层

再贴个远程控制舵机正反转的代码:

  1. #include <Servo.h>
  2. Servo myservo;
  3. int pos = 0;
  4. int servo_pin = 3;
  5. char cmd[10];
  6. bool valid_cmd = false;

  7. void setup()
  8. {

  9. myservo.attach(servo_pin);
  10. Serial.begin(9600);

  11.   }


  12. void loop(){

  13. /*以下部分是串口信息处理过程*/
  14.     //定义一个整数型变量i
  15.     int i;
  16.     //如果串口收到有数据
  17.     if (Serial.available() > 0)
  18.     {
  19.         //变量i最大为10
  20.         for (i = 0; i < 10; i++)
  21.         {
  22.         //清空缓存,存入cmd变量,并以\0作为结束符
  23.             cmd[i] = '\0';
  24.         }  
  25.         //此时i只能取前9位,第10位是结束符\0
  26.         for (i = 0; i < 9; i++)
  27.         {  
  28.             //再次判断串口如果收到有数据,防止数据丢失
  29.             if (Serial.available() > 0)
  30.             {
  31.                 //给变量cmd赋值,取串口收到的前9位字符
  32.                 cmd[i] = Serial.read();
  33.                 delay(1);
  34.             }
  35.             else
  36.             {
  37.                 //如果串口数据超过9位,后面的字符直接

  38.                                                                                                                                  
  39.                 break;
  40.             }
  41.         }
  42.     /*以上串口信息处理结束*/
  43.    
  44.         //得到最终变量cmd的有效值
  45.         valid_cmd = true;
  46.     }
  47.   
  48. if (valid_cmd)
  49.     {
  50. if(0 == strncmp(cmd, "k", 2)){
  51.   
  52.   for(pos = 0; pos <= 180; pos ++)         
  53.     {
  54.         // 输出模拟PWM信号控制舵机                                             
  55.         myservo.write(pos);                        
  56.         delay(15);                             
  57.     }
  58. Serial.println("ok");
  59.   
  60.   }
  61.    else if(0 == strncmp(cmd, "g", 2)){
  62.    
  63.      for(pos = 180; pos >= 0; pos --)         
  64.     {
  65.         // 输出模拟PWM信号控制舵机                                                                       
  66.         myservo.write(pos);                        
  67.         delay(15);                          
  68.     }
  69. Serial.println("ok");
  70. }


  71.   valid_cmd = false;
  72. }
  73. delay(10);
  74. }
复制代码
回复 支持 1 反对 0

使用道具 举报

发表于 2016-2-4 09:21:30 | 显示全部楼层
ITEAD创易工作室 发表于 2016-1-28 18:26
我们搭建的是一个商业级别的服务器,加密安全保护措施肯定是有保障的。要是照你这么想,有多少APP你不敢装 ...

你说的没错,还有一个比较重要的问题就是你们能支持多久,还有随着用户数的增多你们能维护到什么程度 ,带宽,响应速度
我曾经买过很多类似需要服务器提供的产品,都是像您这样的小公司维护的,gps定位器有,老人防丢器手机有,遥控开关也有,都是一开始能用,但是由于种种原因,服务的公司倒闭或者终止项目,手里的设备就成了废品。这都算轻的。因为这些公司的产品还很小众不足以引起想要搞破坏的黑客的兴趣
如果一款智能家居产品他背后没有强大的技术实力最好还是不要把控制权拦到手里,一旦被黑客攻击,控制了一些智能家居,比如你明明以为把门关了,却因为其他原因他给打开了,你明明关了电热器,他却给你开了,被盗,火灾,你们付得起责任吗,还有其他合作伙伴也不愿意把自己的用户资源和管理控制权交给你们吧。所以提供自定义的控制方案才是这种产品的出路。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-1-27 15:39:24 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2016-1-28 08:17:35 | 显示全部楼层
上某宝先买个骗子再说
回复 支持 反对

使用道具 举报

发表于 2016-1-28 08:35:23 | 显示全部楼层
赞!谢谢分享,备用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-28 10:35:01 | 显示全部楼层
zhanghuanqian 发表于 2016-1-28 08:17
上某宝先买个骗子再说

我相信你只是打错字了
回复 支持 反对

使用道具 举报

发表于 2016-1-28 16:29:40 | 显示全部楼层
如果我不想连接你们的云平台,打算自己搭建平台可以吗,比如涉及一些隐私的控制设置,因为公开的云服务器毕竟会有一些安全隐患
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-28 18:26:50 | 显示全部楼层
larblue 发表于 2016-1-28 16:29
如果我不想连接你们的云平台,打算自己搭建平台可以吗,比如涉及一些隐私的控制设置,因为公开的云服务器毕 ...

我们搭建的是一个商业级别的服务器,加密安全保护措施肯定是有保障的。要是照你这么想,有多少APP你不敢装。
回复 支持 反对

使用道具 举报

发表于 2016-1-29 19:08:41 | 显示全部楼层
与ap匹配的ssid和password在程序中哪儿设置呢?
回复 支持 反对

使用道具 举报

发表于 2016-2-1 23:02:03 | 显示全部楼层
ITEAD创易工作室 发表于 2016-1-31 10:35
使用设备自发现机制,app自动搜索设备热点,并自动连接到设备,然后在app中第二步输入你家的SSID和密码即 ...

用户或设备应该也要设id吧?也在app中设置,
现在应用是用于控制,是否可以将传感器数据上传呢?该怎么做?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-2-2 11:51:20 | 显示全部楼层
林定祥 发表于 2016-2-1 23:02
用户或设备应该也要设id吧?也在app中设置,
现在应用是用于控制,是否可以将传感器数据上传呢?该怎么做 ...

用户注册app,设备已经烧写了ID。发传感器数据是一样的。print串口就可以啦。教程代码不是有返回OK的示例吗?
回复 支持 反对

使用道具 举报

发表于 2016-2-4 09:55:40 | 显示全部楼层
看来很方便, 我现在有些用蓝牙通讯的程式, 有兴趣想转成 WiFi 看看.

请问除了 Client 模式外, 可以有其他连线方式吗?
因为 client 模式好像要依赖 router 的存在, 如果在没有 router 的环境下, 可以用手机直接通讯吗?
如果本身只可以作 client, 可否以机作 hotspot, 然後 模块连接手机, 进行通讯?

arduino 上的程式, 应该只看成是 serial 输入.
我的目的是想尝试取代现在用蓝牙的通讯, 不知 serial 的速度, 最快可以做到多少?

而手机上的程式, 会以什麽形式进行连线.  以 WiFi 连线预设的 名字?
如果想自己编写手机的程式, 有相关的范例吗?  
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 04:38 , Processed in 0.050560 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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