查看: 10243|回复: 2

使用machtalk自制智慧家居-控制开关、步进电机舵机(窗帘)

[复制链接]

该用户从未签到

发表于 2014-8-18 14:39 | 显示全部楼层 |阅读模式
本帖最后由 weijinhe 于 2014-10-15 12:47 编辑

machtalk物联网平台升级版本,支持socket长连接、MQTT轻量级传输协议,提供丰富的库类供开发者使用。下面举一个列子:socket长连接控制开关设备(开关)、步进电机舵机(窗帘)。
        1、硬件准备
       (1)Arduino uno
       (2)串口转wifi模块
       (3)继电器模块
       (4)舵机模块
       (5)步进电机模块[size=12.0000pt]
      2、硬件连接
      (1)串口转WifiArduino uno 相连接。
      (2)步进电机三根线5V GND output 分别与Arduino 5V GND D(7)相连接。
      (3)继电器5V GND output 分别与arduino 5V GND D(6)相连接。
      (4)步进电机连接板与步进电机连接,连接板电源与arduino电源连接,N1-N4分别与arduino(8 9 10 11)
     3、烧写代码
     根据您所用的Arduino板子及端口,在Tool/Board中选择。分别引用#include <Stepper.h>#include <Servo.h>#include <JsonParser.h>三个库。
烧写代码时,串口转WIFI模块SW1扳到O,烧写完毕完毕扳到C,代码如下:
[mw_shl_code=c,true]#include <Stepper.h>
#include <Servo.h>

#include <JsonParser.h>
#define STEPS 100

unsigned long last = 0;
unsigned long lasttime = 0;
String returnvalue="";
String receivevalue="";
String lastreceive="";
boolean Response = false;
int counter=0;

Servo myservo;
Stepper stepper(STEPS, 8, 9, 10, 11);

char json[120];
void setup()
{
    Serial.begin(115200);//设置波特率
    pinMode(13,OUTPUT);
    pinMode(6,OUTPUT);
    myservo.attach(7);
    stepper.setSpeed(100);
}
void loop()
{
Serial.println("{\"cmd\":\"login\",\"msg_id\":\"weijinhe\",\"type\":2,\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"device_pin\":\"weijinhe108\"}");
  while(1)
  {
     unsigned long nowtime=millis();
     if (Serial.available()) // serial receive
      {
      char c = Serial.read();      
      if (c != '\n')
        Response = true;
      else if (c == '\n')
      {  
         Response = false;
      }
      if (Response)
        returnvalue += c;         
      }      

   if(nowtime-last>10000)
     {
        
        Serial.println("{\"cmd\":\"post\",\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"values\":[{\"device_value_id\":1,\"device_type_id\":1,\"value\":\"75\"}]}");
        last=nowtime;
     }
   
    if (returnvalue.length() !=0&&Response == false)
     {
       receivevalue+=returnvalue;

          if(returnvalue=="{0x11}")
         {
           Serial.println("{0x12}");
           returnvalue="";
         }
         else
        {
         int i;
         for(i=0;i<returnvalue.length();i++)
         json=returnvalue;
         json='\0';
         returnvalue="";

         JsonParser<32> parser;

         JsonHashTable hashTable = parser.parseHashTable(json);
         if (!hashTable.success())
         {
           Serial.println("JsonParser.parseHashTable() failed");
           return;
         }
         
         char* cmd = hashTable.getString("cmd");
         char* msg_id=hashTable.getString("msg_id");
         int device_value_id=hashTable.getLong("device_value_id");
         if(strcmp(cmd,"opt")==0)
         {                 
           if(device_value_id==2)
          {
            int value = atoi(hashTable.getString("value"));  
            digitalWrite(6,value);//继电器控制         Serial.print("{\"cmd\":\"post\",\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"values\":[{\"device_value_id\":2,\"device_type_id\":2,\"value\":\"");
            Serial.print(value);
            Serial.println("\"}]}");            
         }
           if(device_value_id==3)
          {
            int val = atoi(hashTable.getString("value"));   
            myservo.write(val);  //舵机控制
            Serial.print("{\"cmd\":\"post\",\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"values\":[{\"device_value_id\":3,\"device_type_id\":1,\"value\":\"");
            Serial.print(val);
            Serial.println("\"}]}");            
         }
          if(device_value_id==4)
          {
            int bujinval = atoi(hashTable.getString("value"));   
            stepper.step(bujinval*100);
            Serial.print("{\"cmd\":\"post\",\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"values\":[{\"device_value_id\":4,\"device_type_id\":1,\"value\":\"");
            Serial.print(bujinval);//步进电机控制
            Serial.println("\"}]}");            
         }
        }
        if(strcmp(cmd,"query")==0)
         {
           Serial.print("{\"msg_id\":\"");
           Serial.print(msg_id);
           Serial.println("\",\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"cmd\":\"response\",\"data\":[{\"device_value_id\":1,\"device_type_id\":1,\"value\":\"60\"}]}");      
         }      
      }           
     }
    if(nowtime-lasttime>60000)
    {
      lasttime=nowtime;
      counter+=1;      
      if(lastreceive==receivevalue)
      {
         Serial.println("{\"cmd\":\"login\",\"msg_id\":\"weijinhe\",\"type\":2,\"device_id\":\"66efb6120c7f48bbac10d54e8edb05fb\",\"device_pin\":\"weijinhe108\"}");  
      }
      lastreceive=receivevalue;
     if(counter>6)
     {
       receivevalue="";
       counter=0;
     }  
   }   
  }     
}[/mw_shl_code]
4、串口转WIFI模块配置
wifi进行配置,首先恢复出厂值。 按住模块上的RESET按钮超过6秒钟, 等待启动(30 )。启动后,用电脑的WiFi扫描空间里的WiFi信号,加入WiFi,密码为 12345678
在浏览器里输入192.168.16.254, 会弹出输入用户名和密码的对话框。 用户名和密码都是admin
登陆后有如下界面: 把wifi模块设置成客户端模式。连接本地wifi网络,服务器名称api.machtalk.net 本地端口7777,配置完成后确定。

5、Machtalk物联网平台配置平台配置文档请看教程:http://machtalk.net/intro/book。把程序中继电器换成智能家居中的插座就成为了一款智能插座,把程序中舵机或步进电机可用于控制家里窗帘等,可以根据室内光照情况调节窗帘开度。
machtalk交流群:300250166





arudino_wifi.jpg
步进电机驱动板.jpg
wifi配置.jpg

该用户从未签到

发表于 2014-8-18 18:49 | 显示全部楼层
这个要是能开门关门就好了钥匙忘记拿了手机开唯一的就是宽带停机了或者手机木流量了就卡巴死机了

该用户从未签到

 楼主| 发表于 2014-8-19 08:31 | 显示全部楼层
for 发表于 2014-8-18 18:49
这个要是能开门关门就好了钥匙忘记拿了手机开唯一的就是宽带停机了或者手机木流量了就卡巴死机了 ...

这个技术上是可以实现的,本身machtalk定义了一套和设备交互的协议。手机停机了,可以用web端开,如果家里宽带也停了,那只有找开锁公司了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

5分钟带你快速了解新一代开发板:M5STACK
5分钟带你快速了解新一代
一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
【原创】全球最小口袋3D打印机mini one直播教程贴
【原创】全球最小口袋3D打
最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
【小项目】基于XIAO的逃跑蜘蛛
【小项目】基于XIAO的逃跑
项目介绍:蜘蛛会在夜晚保持安静。但是一有光线,蜘蛛就会开始震动,逃离光线。硬件:
心电传感器实验 ESP32 + AD8232
心电传感器实验 ESP32 + A
早前买了心电传感器,一直没机会用起来,疫情期间无聊翻将出来发现买错了,但是心电导
Stduino IDE stm32 最小系统 小蓝板 驱动继电器(五)
Stduino IDE stm32 最小系
弱电控制强电 单片机输出输入的电压在3.3V到5V之间,而生活中常用电器很多是12V、220V
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表