久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6119|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Arduino+ESP8266+onenet

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:260165 發(fā)表于 2018-2-22 11:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*
   采用外接電源單獨供電,2 3口作為軟串口接PC機作為調(diào)試端
   1 0為串口,連接WIFI模塊
*/
#include <SoftwareSerial.h>
#include "edp.c"
#include<dht11.h>
dht11 DHT11;
#define KEY  ""    //APIkey
#define ID   ""                          //設(shè)備ID
//#define PUSH_ID "680788"
#define PUSH_ID NULL
// 串口
#define _baudrate   9600
#define _rxpin      3
#define _txpin      2
#define WIFI_UART   Serial
#define DBG_UART    dbgSerial   //調(diào)試打印串口
#define DHT11PIN A0 //溫濕度傳感器的pin
#define MQ2 A1  //MQ-2傳感器的pin
#define FMQ 9  //蜂鳴器pin
SoftwareSerial dbgSerial( _rxpin, _txpin ); // 軟串口,調(diào)試打印
edp_pkt *pkt;
/*
* doCmdOk
* 發(fā)送命令至模塊,從回復(fù)中獲取期待的關(guān)鍵字
* keyword: 所期待的關(guān)鍵字
* 成功找到關(guān)鍵字返回true,否則返回false
*/
bool doCmdOk(String data, char *keyword)
{
  bool result = false;
  if (data != "")   //對于tcp連接命令,直接等待第二次回復(fù)
  {
    WIFI_UART.println(data);  //發(fā)送AT指令
    DBG_UART.print("SEND: ");
    DBG_UART.println(data);
  }
  if (data == "AT")   //檢查模塊存在
    delay(2000);
  else
    while (!WIFI_UART.available());  // 等待模塊回復(fù)
  delay(200);
  if (WIFI_UART.find(keyword))   //返回值判斷
  {
    DBG_UART.println("do cmd OK");
    result = true;
  }
  else
  {
    DBG_UART.println("do cmd ERROR");
    result = false;
  }
  while (WIFI_UART.available()) WIFI_UART.read();   //清空串口接收緩存
  delay(500); //指令時間間隔
  return result;
}

void setup()
{
  char buf[100] = {0};
  int tmp;
  
  pinMode(13, OUTPUT);   //WIFI模塊指示燈
  pinMode(8, OUTPUT);    //用于連接EDP控制的發(fā)光二極管
  WIFI_UART.begin( _baudrate );
  DBG_UART.begin( _baudrate );
  WIFI_UART.setTimeout(3000);    //設(shè)置find超時時間
  delay(3000);
  DBG_UART.println("hello world!");
  delay(2000);
  
  while (!doCmdOk("AT", "OK"));
  digitalWrite(13, HIGH);   // 使Led亮
   while (!doCmdOk("AT+CWMODE=3", "OK"));            //工作模式
    while (!doCmdOk("AT+CWJAP=\"wififname\",\"password\"", "OK"));
    while (!doCmdOk("AT+CIPSTART=\"TCP\",\"183.230.40.39\",876", "CONNECT"));
    while (!doCmdOk("AT+CIPMODE=1", "OK"));           //透傳模式
    while (!doCmdOk("AT+CIPSEND", ">"));              //開始發(fā)送

}
void loop()
{
  static int edp_connect = 0;
  bool trigger = false;
  edp_pkt rcv_pkt;
  unsigned char pkt_type;
  int i, tmp;
  char num[10];
  int wd;  //溫度
  int sd;  //濕度
  int mq;  //氣體
  char wd1[10]; //字符串格式溫度
  char sd1[10]; //字符串格式濕度
  char mq1[10]; //字符串格式氣體
  int chk = DHT11.read(DHT11PIN);//讀DHT11c
  mq = analogRead(MQ2);
  if(mq>=200)
    digitalWrite(FMQ, HIGH); //蜂鳴器響
  /* EDP 連接 */
  if (!edp_connect)
  {
    while (WIFI_UART.available()) WIFI_UART.read(); //清空串口接收緩存
    packetSend(packetConnect(ID, KEY));             //發(fā)送EPD連接包
    while (!WIFI_UART.available());                 //等待EDP連接應(yīng)答
    if ((tmp = WIFI_UART.readBytes(rcv_pkt.data, sizeof(rcv_pkt.data))) > 0 )
    {
      rcvDebug(rcv_pkt.data, tmp);
      if (rcv_pkt.data[0] == 0x20 && rcv_pkt.data[2] == 0x00 && rcv_pkt.data[3] == 0x00)
      {
        edp_connect = 1;
        DBG_UART.println("EDP connected.");
      }
      else
        DBG_UART.println("EDP connect error.");
    }
    packetClear(&rcv_pkt);
  }
  wd = (float)DHT11.temperature;//獲取溫度
  sd = (float)DHT11.humidity;//獲取濕度
  trigger = wd;  //傳感器是否工作
  if (edp_connect && trigger)
  {
    DBG_UART.print("temperature: ");
    DBG_UART.println((float)DHT11.temperature, 2);
    DBG_UART.print("humidity: ");
    DBG_UART.println((float)DHT11.humidity, 2);
    DBG_UART.print("MQ-2: ");
    DBG_UART.println(analogRead(MQ2));
    sprintf(wd1,"%d",wd);  //int型轉(zhuǎn)換char型
    sprintf(sd1,"%d",sd);  //int型轉(zhuǎn)換char型
    sprintf(mq1,"%d",mq);  //int型轉(zhuǎn)換char型
    packetSend(packetDataSaveTrans(PUSH_ID, "WD", wd1));  //發(fā)送數(shù)據(jù)存儲包   當PUSH_ID不為NULL時轉(zhuǎn)發(fā)至PUSH_ID   
    delay(100);
    packetSend(packetDataSaveTrans(NULL, "SD", sd1)); //發(fā)送的數(shù)據(jù)必須為字符串 ""
    delay(100);
    packetSend(packetDataSaveTrans(NULL, "MQ", mq1));
    delay(2000);              
  }
  while (WIFI_UART.available())
  {
    readEdpPkt(&rcv_pkt);
    if (isEdpPkt(&rcv_pkt))
    {
      pkt_type = rcv_pkt.data[0];
      switch (pkt_type)
      {
        case CMDREQ:
          char edp_command[50];
          char edp_cmd_id[40];
          long id_len, cmd_len, rm_len;
          char datastr[20];
          char val[10];
          memset(edp_command, 0, sizeof(edp_command));
          memset(edp_cmd_id, 0, sizeof(edp_cmd_id));
          edpCommandReqParse(&rcv_pkt, edp_cmd_id, edp_command, &rm_len, &id_len, &cmd_len);
          DBG_UART.print("rm_len: ");
          DBG_UART.println(rm_len, DEC);
          delay(10);
          DBG_UART.print("id_len: ");
          DBG_UART.println(id_len, DEC);
          delay(10);
          DBG_UART.print("cmd_len: ");
          DBG_UART.println(cmd_len, DEC);
          delay(10);
          DBG_UART.print("id: ");
          DBG_UART.println(edp_cmd_id);
          delay(10);
          DBG_UART.print("cmd: ");
          DBG_UART.println(edp_command);

          //數(shù)據(jù)處理與應(yīng)用中EDP命令內(nèi)容對應(yīng)
          //本例中格式為  datastream:[1/0]
          sscanf(edp_command, "%[^:]:%s", datastr, val);//datastr為數(shù)據(jù)流名
          if (atoi(val) == 1)
            digitalWrite(13, HIGH);   // 使Led亮
          else
            digitalWrite(13, LOW);   // 使Led滅
          packetSend(packetDataSaveTrans(NULL, datastr,val)); //將新數(shù)據(jù)值上傳至數(shù)據(jù)流
          break;
        default:
          DBG_UART.print("unknown type: ");
          DBG_UART.println(pkt_type, HEX);
          break;
      }
    }
    //delay(4);
  }
  if (rcv_pkt.len > 0)
    packetClear(&rcv_pkt);
  delay(150);
  //packetSend(packetDataSaveTrans(NULL, "text", 5)); //將新數(shù)據(jù)值上傳至數(shù)據(jù)流
}
/*
* readEdpPkt
* 從串口緩存中讀數(shù)據(jù)到接收緩存
*/
bool readEdpPkt(edp_pkt *p)
{
  int tmp;
  if ((tmp = WIFI_UART.readBytes(p->data + p->len, sizeof(p->data))) > 0 )
  {
    rcvDebug(p->data + p->len, tmp);
    p->len += tmp;
  }
  return true;
}
/*
* packetSend
* 將待發(fā)數(shù)據(jù)發(fā)送至串口,并釋放到動態(tài)分配的內(nèi)存
*/
void packetSend(edp_pkt* pkt)
{
  if (pkt != NULL)
  {
    WIFI_UART.write(pkt->data, pkt->len);    //串口發(fā)送
    WIFI_UART.flush();
    free(pkt);              //回收內(nèi)存
  }
}
void rcvDebug(unsigned char *rcv, int len)
{
  int i;
  DBG_UART.print("rcv len: ");
  DBG_UART.println(len, DEC);
  for (i = 0; i < len; i++)
  {
    DBG_UART.print(rcv[i], HEX);
    DBG_UART.print(" ");
  }
  DBG_UART.println("");
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:488652 發(fā)表于 2019-3-11 16:35 | 只看該作者
你好  我測試該程序的時候,串口監(jiān)視器一直發(fā)送  AT 是什么原因
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美在线一区二区视频 | 欧美日韩亚洲国产综合 | 熟女毛片| 欧美视频网 | 成人做爰999 | 亚洲精品一区二区三区在线观看 | 亚洲精品自在在线观看 | av在线三级 | 四虎影音 | 黄色一级片在线播放 | 91欧美激情一区二区三区成人 | av资源网站 | 久草视频在线播放 | 国产午夜精品一区二区三区在线观看 | 国产欧美一区二区三区免费 | 午夜三级在线观看 | 国产黑丝在线 | 91精品在线看| 狠狠干狠狠插 | 欧美一级特黄aaa大片在线观看 | 美女人人操 | 国产精品久久二区 | 区一区二在线观看 | 99久久精品国产一区二区三区 | 成人免费看片又大又黄 | 亚州无限乱码 | 中文字幕视频在线观看 | 亚洲欧美日韩系列 | 日本午夜精品一区二区三区 | 亚洲欧美激情精品一区二区 | 久久99深爱久久99精品 | 欧美一级欧美一级在线播放 | 男女激情网 | 国产精品国产精品 | 欧美一区二区三区免费电影 | 久草免费在线视频 | 精品视频国产 | 久久久精品一区 | 亚洲欧美日韩电影 | 亚洲成人免费在线观看 | 91免费在线 |