智能家居esp8266对接机智云

依然存在稳定性问题

机智云官网——机智云

一个比较详细的教程——esp8266

一开始采用的是esp12f   可是他太不稳定,总是掉线,机智云的固件我也是刷了无数遍,哎太难了。

我比较懒,走过了太多的弯路。太迷茫又太累。博客很少写教程,只是做个笔记记述一下心路历程。

  1 /**
  2 ************************************************************
  3 ***********************************************************/
  4 #include <Gizwits.h>
  5 #include <Wire.h>
  6 #include <SoftwareSerial.h>
  7 //#include <PinChangeInt.h>    //外部中断
  8 SoftwareSerial mySerial(A2, A3); // A2 -> RX, A3 -> TX
  9 bool varR_open = 0;
 10 Gizwits myGizwits;
 11 #define   KEY1              6
 12 #define   KEY2              7
 13 #define   KEY1_SHORT_PRESS  1
 14 #define   KEY1_LONG_PRESS   2
 15 #define   KEY2_SHORT_PRESS  4
 16 #define   KEY2_LONG_PRESS   8
 17 #define   NO_KEY            0
 18 #define   KEY_LONG_TIMER    3
 19 const int TrigPin = 10; 
 20 const int EchoPin = 13; 
 21 float cm; 
 22 unsigned long Last_KeyTime = 0;
 23 unsigned long gokit_time_s(void)
 24 {
 25   return millis() / 1000;
 26 }
 27 char gokit_key1down(void)
 28 {
 29   unsigned long keep_time = 0;
 30   if (digitalRead(KEY1) == LOW)
 31   {
 32     delay(100);
 33     if (digitalRead(KEY1) == LOW)
 34     {
 35       keep_time = gokit_time_s();
 36       while (digitalRead(KEY1) == LOW)
 37       {
 38         if ((gokit_time_s() - keep_time) > KEY_LONG_TIMER)
 39         {
 40           Last_KeyTime = gokit_time_s();
 41           return KEY1_LONG_PRESS;
 42         }
 43       } 
 44       if ((gokit_time_s() - Last_KeyTime) > KEY_LONG_TIMER)
 45       {
 46         return KEY1_SHORT_PRESS;
 47       }
 48       return 0;
 49     }
 50     return 0;
 51   }
 52   return 0;
 53 }
 54 char gokit_key2down(void)
 55 {
 56   int unsigned long keep_time = 0;
 57   if (digitalRead(KEY2) == LOW)
 58   {
 59     delay(100);
 60     if (digitalRead(KEY2) == LOW)
 61     {
 62       keep_time = gokit_time_s();
 63       while (digitalRead(KEY2) == LOW) 
 64       {
 65 
 66         if ((gokit_time_s() - keep_time) > KEY_LONG_TIMER)
 67         {
 68           Last_KeyTime = gokit_time_s();
 69           return KEY2_LONG_PRESS;
 70         }
 71       }
 72       if ((gokit_time_s() - Last_KeyTime) > KEY_LONG_TIMER)
 73       {
 74         return KEY2_SHORT_PRESS;
 75       }
 76       return 0;
 77     }
 78     return 0;
 79   }
 80   return 0;
 81 }
 82 char gokit_keydown(void)
 83 {
 84   char ret = 0;
 85   ret |= gokit_key2down();
 86   ret |= gokit_key1down();
 87   return ret;
 88 }
 89 /**
 90 * KEY_Handle 
 91 * @param none
 92 * @return none
 93 */
 94 void KEY_Handle(void)
 95 {
 96   /*  Press for over than 3 second is Long Press  */
 97   switch (gokit_keydown())
 98   {
 99     case KEY1_SHORT_PRESS:
100      // mySerial.println(F("KEY1_SHORT_PRESS , Production Test Mode "));
101       myGizwits.setBindMode(WIFI_PRODUCTION_TEST);
102       break;
103     case KEY1_LONG_PRESS:
104      // mySerial.println(F("KEY1_LONG_PRESS ,Wifi Reset"));
105       myGizwits.setBindMode(WIFI_RESET_MODE);
106       break;
107     case KEY2_SHORT_PRESS:
108      // mySerial.println(F("KEY2_SHORT_PRESS Soft AP mode"));
109       myGizwits.setBindMode(WIFI_SOFTAP_MODE);
110       //Soft AP mode
111       break;
112     case KEY2_LONG_PRESS:
113      // mySerial.println(F("KEY2_LONG_PRESS ,AirLink mode"));
114       myGizwits.setBindMode(WIFI_AIRLINK_MODE);
115       digitalWrite(8,HIGH);
116       //AirLink mode
117       break;
118     default:
119       break;
120   }
121 }
122 void ceju()
123 {
124 digitalWrite(TrigPin, LOW); 
125 delayMicroseconds(2); 
126 digitalWrite(TrigPin, HIGH); 
127 delayMicroseconds(10); 
128 digitalWrite(TrigPin, LOW); 
129 cm = pulseIn(EchoPin, HIGH) / 58.0; //算成厘米 
130 cm = (int(cm * 100.0)) / 100.0; //保留两位小数 
131 mySerial.println(cm);
132 //Serial.print(cm);
133 if(cm<20)
134 {
135   digitalWrite(12,LOW);  
136    digitalWrite(11,HIGH);
137   } 
138   
139 //Serial.print("cm"); 
140 //Serial.println();  
141   }
142 /**
143 * Serial Init , Gizwits Init  
144 * @param none
145 * @return none
146 */
147 void setup() {
148   // put your setup code here, to run once:
149   mySerial.begin(9600);
150   pinMode(KEY1, INPUT_PULLUP);
151   pinMode(KEY2, INPUT_PULLUP);
152   pinMode(5,OUTPUT);//   led
153   pinMode(8,OUTPUT);
154   pinMode(9,INPUT);
155   //pinMode (10,INPUT);
156   
157   pinMode(12,OUTPUT);
158   pinMode (11,OUTPUT);
159   digitalWrite(12,HIGH);  
160   digitalWrite(11,HIGH);
161   digitalWrite(5,HIGH);
162   digitalWrite(9,HIGH);  
163   digitalWrite(10,HIGH);
164   pinMode(TrigPin, OUTPUT); 
165 pinMode(EchoPin, INPUT); 
166 
167   myGizwits.begin();
168  // mySerial.println("GoKit init  OK 
");
169   //attachPinChangeInterrupt(4,xianwei, CHANGE);  //开启外部中断
170    //attachInterrupt(0,xianwei,FALLING);
171 }
172 void xianwei()
173 {
174         digitalWrite(12,HIGH);  
175         digitalWrite(11,LOW);
176         delay(1000);
177         digitalWrite(12,HIGH);  
178         digitalWrite(11,HIGH);
179   }
180 /**
181 * Wifi status printf  
182 * @param none
183 * @return none
184 */
185 void wifiStatusHandle()
186 {
187   if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
188   {
189    // mySerial.println(F("WIFI_SOFTAP!"));
190   }
191   
192   if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
193   {
194    // mySerial.println(F("WIFI_AIRLINK!"));
195   }
196   
197   if(myGizwits.wifiHasBeenSet(WIFI_STATION))
198   {
199    // mySerial.println(F("WIFI_STATION!"));
200   }
201   
202   if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
203   {
204     //mySerial.println(F("WIFI_CON_ROUTER!"));
205   }
206   
207   if(myGizwits.wifiHasBeenSet(WIFI_DISCON_ROUTER))
208   {
209    // mySerial.println(F("WIFI_DISCON_ROUTER!"));
210   }
211   
212   if(myGizwits.wifiHasBeenSet(WIFI_CON_M2M))
213   {
214    // mySerial.println(F("WIFI_CON_M2M!"));
215   }
216   
217   if(myGizwits.wifiHasBeenSet(WIFI_DISCON_M2M))
218   {
219    // mySerial.println(F("WIFI_DISCON_M2M!"));
220   }
221 }
222 /**
223 * Arduino loop 
224 * @param none
225 * @return none
226 */
227 void loop() {  
228   ceju();
229     if(digitalRead(9)==LOW)
230    {
231     xianwei();
232     }
233    bool varR_open = 0;
234   if(myGizwits.hasBeenSet(EVENT_open))
235   {
236     myGizwits.read(EVENT_open,&varR_open);
237      if(varR_open ==1){
238    digitalWrite(12,LOW);  
239    digitalWrite(11,HIGH);
240  
241     }
242     else
243     {
244     digitalWrite(12,HIGH);  
245     digitalWrite(11,HIGH);
246     }
247   }
248   bool varR_test = 0;
249   if(myGizwits.hasBeenSet(EVENT_test))
250   {
251     myGizwits.read(EVENT_test,&varR_test);
252      if(varR_test ==1){
253     digitalWrite(5,LOW);
254     }
255     else
256     {
257        digitalWrite(5,HIGH);
258     }
259   }
260 
261   KEY_Handle();
262   wifiStatusHandle();
263   myGizwits.process();
264 }
@青山不移,文笔不息。学习,坚持,梦想青春!
原文地址:https://www.cnblogs.com/pengwenzheng/p/7943966.html