2222
Dependencies: MilkcocoaSampleESP8266 mbed
main.cpp
- Committer:
- jacey
- Date:
- 2016-12-08
- Revision:
- 0:89cfad479933
File content as of revision 0:89cfad479933:
/******************************************************************************* * Copyright (c) 2014 IBM Corp. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Ian Craggs - initial API and implementation and/or initial documentation *******************************************************************************/ /** This is a sample program to illustrate the use of the MQTT Client library on the mbed platform. The Client class requires two classes which mediate access to system interfaces for networking and timing. As long as these two classes provide the required public programming interfaces, it does not matter what facilities they use underneath. In this program, they use the mbed system libraries. */ #include "mbed.h" #include "MQTTESP8266.h" #include "MQTTClient.h" #define u8 char #define u16 int #define USART_REC_LEN 200 //隅膽郔湮諉彶弇啋瞎 200 #define RED 1 #define YELLOW 2 #define GREEN 3 #define ON 0 #define OFF 1 // #define true 0 #define OFF 1 Serial pc(PA_0, PA_1);//RGB Serial pc1(PC_6, PC_7);//徨? Serial esp(D8,D2); DigitalOut wifi_reset(D6); // WiFi Reset char SN[16]="123456789abcdef"; char RGB =1; uint16_t number=0; float PT; DigitalOut led(LED1); DigitalOut led1(D5); extern DigitalOut led; //InterruptIn Begin(PC_0); //InterruptIn End(PC_1); DigitalIn Clear(PC_2); InterruptIn Begin(A2); InterruptIn End(A3); Timer timer; u8 LIGHT_ZERO[3]={0xA5,0x6A,0x0F}; u8 USART_RX_BUF[USART_REC_LEN]; //諉彶?茇,郔湮USART_REC_LEN?弇啋瞎. u16 USART_RX_STA=0; //諉彶? //RGB u8 SERIAL_RX_BUF[USART_REC_LEN]; //諉彶?茇,郔湮USART_REC_LEN?弇啋瞎. u16 SERIAL_RX_STA=0; //諉彶? //徨? bool b,begin_b,end_b; void fallfunc_begin(); void fallfunc_End(); void echouart(), echouart1(); void fallfunc_begin() { if (begin_b == false) {begin_b=true; timer.start(); //printf("enter 1 -->"); number++; led1=1; } // printf("enter 2 \n\r"); } void fallfunc_end() { if(end_b==false) { end_b=true; led=1; //pc1.printf(" %f ",timer.read()); // pc1.printf(" %d ",timer.read_us()); //printf("exit 1 -->"); PT=timer.read(); timer.reset();//?笭离0 timer.stop(); } //printf("exit 2 \n\r"); } void echouart() //RGB { u8 Res; Res=pc.getc(); USART_RX_BUF[USART_RX_STA]=Res ; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//諉彶揃蹋嶒悷,笭陔嶱宎諉彶 //pc.putc(pc.getc()); } void echouart1() //徨? { u8 Res; Res=pc1.getc(); SERIAL_RX_BUF[SERIAL_RX_STA]=Res ; SERIAL_RX_STA++; SN[SERIAL_RX_STA]=SERIAL_RX_BUF[SERIAL_RX_STA]; if(SERIAL_RX_STA>(USART_REC_LEN-1))SERIAL_RX_STA=0;//諉彶揃蹋嶒悷,笭陔嶱宎諉彶 //pc.putc(pc.getc());\ } // ================================================================ /* char ssid[32] = "MyAP"; // enter router ssid inside the quotes char pwd [32] = "kuan12345";// enter router password inside the quotes char* hostname = "192.168.43.146"; // broker IP address */ char ssid[32] = "MITAC_LMC"; // enter router ssid inside the quotes char pwd [32] = "Aa000000";// enter router password inside the quotes char* hostname = "10.87.12.133"; // broker IP address //char* hostname = "85.119.83.194"; // test.mosquitto.org //char* hostname = "52.29.27.181"; // broker IP HiVMQ float received; char received_buf[50]; char topic_sub[50]; char topic[50]; char buf[100]; char timebuf[32]; // publish S1/M01 char* topicA = "S1/M01/SN"; // Serial Number char* topicB = "S1/M01/QN"; // Quantity Count char* topicC = "S1/M01/PT"; // process time char* topicD = "S1/M01/RGB"; // Lamp Color /* // subscribe S1/M02 char* topic0 = "S1/M02/SN"; char* topic1 = "S1/M02/QN"; char* topic2 = "S1/M02/PT"; char* topic4 = "S1/M02/RGB"; */ void startconnect(); void setRTC(); // void alert(); //void SMM(); //void echouart(), echouart1(); int arrivedcount = 0; //============================================== int main() { int i = 1; u8 len,len1; u16 red,green,blue; int t; // ========================MQTT場宎趙================ pc1.baud(9600); pc.baud(9600); // pc.printf("Please input!"); // pc1.printf("Please input!"); /* pc.attach(&echouart,SerialBase::RxIrq); pc1.attach(&echouart1,SerialBase::RxIrq); begin.fall(&fallfunc_begin); end.fall(&fallfunc_end); */ esp.baud(115200); // ESP8266 baudrate. Maximum on KLxx' is 115200, 230400 works on K20 and K22F for(t=0;t<3;t++) {pc.putc(LIGHT_ZERO[t]);} //RGB //參腕善腔揃蹋追堤,蚚黺捼? printf("\n\r----- Smart Machine Monitor 0A1-----\n\r"); led1=1; // Start wifi_reset=0; // wifi ESP8226 reset setRTC(); wifi_reset=1; wait(1); startconnect(); // WiFi connection MQTTESP8266 ipstack(D8, D2, D6, ssid, pwd); // tx D8, rx D2, reset D6 MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack); int port = 1883; int rc = ipstack.connect(hostname, port); if (rc != 0) printf("rc from TCP connect is %d\n\r", rc); MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; data.clientID.cstring = "mbed01"; data.username.cstring = "user01"; data.password.cstring = "pwd01"; if ((rc = client.connect(data)) != 0) { printf("rc from MQTT connect is %d\n\r", rc);} MQTT::Message message; // SMM(); // preset value // char SN[16]="123456789abcdef"; RGB=1; number=0; // quantity PT=12; // Process Time pc.attach(&echouart,SerialBase::RxIrq); pc1.attach(&echouart1,SerialBase::RxIrq); Begin.fall(&fallfunc_begin); End.fall(&fallfunc_end); // ==================end====================== //while(1) // { for(i=1;i<999;i++) { /////////////////////徨?////////////////////////////////// if(SERIAL_RX_STA>9) { len1=SERIAL_RX_STA;//腕善森棒諉彶善腔揃蹋墿僅 for(t=0;t<len1;t++) { SN[t]=SERIAL_RX_BUF[t]; pc1.putc(SERIAL_RX_BUF[t]); }//參腕善腔揃蹋追堤,蚚黺捼? pc1.printf(",%u ",RGB);//參?伎追堤蚚黺捼? SERIAL_RX_STA=0; number++; //蚚黺??PCB啣? pc1.printf("Number=%d ",number); if(Clear==1)// PCB啣?錨 {number=0;} } //徨? /////////////////////RGB//////////////////////////////////// if(USART_RX_STA>7) { len=USART_RX_STA;//腕善森棒諉彶善腔揃蹋墿僅 for(t=0;t<len;t++) {pc.putc(USART_RX_BUF[t]);} //RGB //參腕善腔揃蹋追堤,蚚黺捼? USART_RX_STA=0; if(USART_RX_BUF[0] == 0x5A) { USART_RX_BUF[9]=(USART_RX_BUF[0]+USART_RX_BUF[1]+USART_RX_BUF[2]+ USART_RX_BUF[3]+USART_RX_BUF[4]+USART_RX_BUF[5]+USART_RX_BUF[6])&0xff; if(USART_RX_BUF[9] == USART_RX_BUF[7])// RGB 苺? { red=USART_RX_BUF[4]; //pc.putc(red); RED弇啋 green=USART_RX_BUF[5]; //pc.putc(green);green弇啋 blue=USART_RX_BUF[6]; //pc.putc(blue); blue弇啋 } } } if(0x70<=red && red<=0x90 && 0x0C<=green && green<=0x4C && 0x0B<=blue && blue<=0x4B) //RED瓚隅嶲,?虐噫奧隅,嘛?硉 {RGB=RED;} else if(0x89<=red && red<=0xFF && 0x66<=green && green<=0xA6 && 0x37<=blue && blue<=0x77) //YELLOW瓚隅嶲,?虐噫奧隅,嘛?硉 {RGB=YELLOW;} else if(0x12<=red && red<=0x62 && 0x36<=green && green<=0x76 && 0x23<=blue && blue<=0x63) {RGB=GREEN;} else {RGB=0;} //////////////////////////////////////////////////// begin_b=false; end_b=false; // printf("--- Wait for Enter --\n\r"); while (begin_b==false) { led=1; wait(0.5); led=0; wait(0.5); } while (end_b==false) {led1=1; wait(0.5); led1=0; wait(0.5);} // for(int i1=1;i1<10;i1++) { //i++; // SMM(); sprintf(buf,"%16s",SN); // SN from bar Code reader printf("|%3d SN=%s ",i, buf); message.qos = MQTT::QOS1; message.retained = true; // add message.dup = false; // add message.payload = (void*)buf; // add message.payloadlen = strlen(buf)+1; rc = client.publish(topicA, message); // while (arrivedcount < 0) // client.yield(100); wait (0.05); // sprintf(SN,"%16s",0); // SN from bar Code reader sprintf(buf,"%5d",number); printf("|count=%s ", buf); message.qos = MQTT::QOS1; message.retained = true; // add //message.dup = false; // add //message.payload = (void*)buf; // add message.payloadlen = strlen(buf)+1; rc = client.publish(topicB, message); // while (arrivedcount < 0) //client.yield(100); wait (0.05); sprintf(buf,"%5.2f",PT); printf("|PT=%s" ,buf); message.qos = MQTT::QOS1; message.retained = true; // add // message.dup = false; // add // message.payload = (void*)buf; // add message.payloadlen = strlen(buf)+1; rc = client.publish(topicC, message); //while (arrivedcount < 0) //client.yield(100); wait (0.5); sprintf(buf,"%d",RGB); printf("| RGB=%s|\n\r", buf); message.qos = MQTT::QOS1; message.retained = true; // add //message.dup = false; // add //message.payload = (void*)buf; // add message.payloadlen = strlen(buf)+1; rc = client.publish(topicD, message); //while (arrivedcount < 0) //client.yield(100); wait (1); begin_b=false; end_b=false; // } } if ((rc = client.disconnect()) != 0) printf("rc from disconnect was %d\n\r", rc); ipstack.disconnect(); printf("Finishing with %d messages received\n\r", arrivedcount); // } } // ===============================================