• <table id="0ws66"></table>
  • <noscript id="0ws66"><source id="0ws66"></source></noscript>
    Arduino_learn

    Arduino_learn的詳細介紹

    創作者:giveup | 更新日期:2017-03-11 | 在線時長:3天
    All Source! Arduino UNO, using an Arduino Wiznet Ethernet shield.

    //Arduino UNO,  using an Arduino Wiznet Ethernet shield, DHT11, I2C 1602 LCD.

     

    /*
     using an Arduino Wiznet Ethernet shield.

     Circuit:
     * Ethernet shield attached to pins 10, 11, 12, 13

     */

    #include
    #include
    //PCF8574A地址為0x38~0x3f
    LiquidCrystal_I2C lcd(0x3f, 16, 2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

    #include
    DS1307 RTC;

    #include
    #include 

    // Enter a MAC address for your controller below.
    // Newer Ethernet shields have a MAC address printed on a sticker on the shield
    byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };

    // Initialize the Ethernet client library
    // with the IP address and port of the server
    // that you want to connect to (port 80 is default for HTTP):
    EthernetClient client;

    // fill in an available IP address on your network here,
    // for manual configuration:
    IPAddress ip(192, 168, 2, 177);
    IPAddress gateway(192, 168, 2, 1);
    IPAddress subnet(255, 255, 255, 0);
    // fill in your Domain Name Server address here:
    IPAddress myDns(8, 8, 8, 8);

    //const char server[] = "www.embanju.org";
    const char server[] = "192.168.2.104";

    //IPAddress server(121.42.180.30);
    const int port = 8181;

    #include
    //=============  此處必須修改============
    const char APIKEY[] = "hahaha"; // 此處替換為你自己的API KEY
    char DEVICEID[] = "1"; // 此處替換為你的設備編號
    const char INPUTID1[] = "1";
    const char INPUTID2[] = "1";
    const char INPUTID3[] = "1";
    const char INPUTID4[] = "1";
    //=======================================

    aJsonStream serial_stream(&client);
    unsigned long lastCheckInTime = 0;
    unsigned long lastUpdateTime = 0;
    const unsigned long postingInterval = 40000; // delay between 2 datapoints, 40s
    const unsigned long updateInterval = 5000; // delay between 2 datapoints, 5s
    boolean isCheckIn = false;

    #include "DHT.h"

    #define DHTPIN 9     // what digital pin we're connected to

    // Uncomment whatever type you're using!
    #define DHTTYPE DHT11   // DHT 11
    //#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)

    // Connect pin 1 (on the left) of the sensor to +5V
    // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
    // to 3.3V instead of 5V!
    // Connect pin 2 of the sensor to whatever your DHTPIN is
    // Connect pin 4 (on the right) of the sensor to GROUND
    // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

    // Initialize DHT sensor.
    // Note that older versions of this library took an optional third parameter to
    // tweak the timings for faster processors.  This parameter is no longer needed
    // as the current DHT reading algorithm adjusts itself to work on faster procs.
    DHT dht(DHTPIN, DHTTYPE);
    //out to lcd & Serial.
    #define OUT(s) do{Serial.print(s);lcd.print(s);}while(0)
    #define OUT_ln(s) do{Serial.println(s);lcd.print(s);}while(0)
    #define OUT_FMT(s,v) do{Serial.print(s,v);lcd.print(s,v);}while(0)

    // This is optional, but set to false to disable
    #define LED_DEBUG true
    #include

    // Set this to override the default value
    #define LED_DEBUG_PIN 2

    //update values
    //同時上傳n個接口數據調用此函數
    #define UPDATE_BEGIN(did) do{ client.print(F("{\"M\":\"update\",\"ID\":\"")); client.print(did);\
        client.print(F("\",\"V\":{\""));Serial.print(F("update:"));}while(0)
    //repeats as many as you want
    #define UPDATE_V(id,value) do{client.print(id); client.print(F("\":\"")); client.print(value); \
            Serial.print(id); Serial.print(F("->")); Serial.print(value); }while(0)
    #define UPDATE_V_NEXT() do{client.print(F("\",\""));Serial.print(":");}while(0)

    #define UPDATE_END() do{client.println(F("\"}}"));\
        lastCheckInTime = millis(); \
        lastUpdateTime= millis(); \
        Serial.println(); }while(0)

    #define sayToClient(client_id, content)  do{ \
          client.print(F("{\"M\":\"say\",\"ID\":\"")); \
          client.print(client_id);  \
          client.print(F("\",\"C\":\""));  \
          client.print(content);    \
          client.println(F("\"}"));    \
          lastCheckInTime = millis();   \
          Serial.print(F("say to ")); Serial.print(client_id); Serial.print(F(":")); \
          Serial.println(content);  }while(0)

    void checkIn();

    void printTime() {
        DateTime now = RTC.now();
        char buf[26];
        strncpy(buf, "YYYY-MM-DD hh:mm:ss \0", sizeof(buf));
        Serial.print(now.format(buf));
    }

    void setup() {
        // Open serial communications and wait for port to open:
        Serial.begin(115200);

        // this check is only needed on the Leonardo:
        while (!Serial) {
            ; // wait for serial port to connect. Needed for Leonardo only
        }
        // Set current time only the first to values, hh,mm are needed
        //   Wire.begin();
        lcd.init();                      // initialize the lcd
        // Print a message to the LCD.
        lcd.backlight();
        delay(300);
        lcd.setCursor(1, 0);
        lcd.print(F("Hello, world!"));
        lcd.setCursor(0, 1);

        if (!RTC.isrunning()) {
            OUT(F("RTC is NOT running!\n"));
            // following line sets the RTC to the date & time this sketch was compiled
            RTC.adjust(DateTime(__DATE__, __TIME__));
        }
        printTime();
        Serial.println();
        dht.begin();
        // start the Ethernet connection:
        Serial.println(F("Trying to get an IP address using DHCP"));
        // initialize the ethernet device not using DHCP:
        if (Ethernet.begin(mac) == 0) {
            OUT(F("Failed to configure Ethernet using DHCP\n"));
            // start the Ethernet connection using a fixed IP address and DNS server:
            Ethernet.begin(mac, ip, myDns, gateway, subnet);
        }
        // print your local IP address:
        ip = Ethernet.localIP();
        Serial.print(F("My IP address: "));
        lcd.setCursor(0, 1);
        lcd.print(F("IP:"));
        for (byte thisByte = 0; thisByte < 4; thisByte++) {
            // print the value of each byte of the IP address:
            OUT_FMT(ip[thisByte], DEC);
            OUT(".");
        }
        Serial.println();

        Serial.println(F("Try Connecting..."));
        Serial.println(F("connecting..."));
        if(client.connect(server, port)){
          Serial.println(F("connected"));
          delay(2000);
          checkIn();
        }else{
          Serial.println(F("connection failed"));
        }
    }
    unsigned long lastConnectionTime = 0;             // last time you connected to the server, in milliseconds
    const unsigned long Interval = 1L * 1000L; // delay between updates, in milliseconds
        float h,t;
    void loop() {
        // Wait a few seconds between measurements.
    //    delay(2000);
        if (millis() - lastCheckInTime > postingInterval) {
            Serial.println(F("checking in"));
            checkIn();
        }

        if (millis() - lastConnectionTime > Interval) {
         // Reading temperature or humidity takes about 250 milliseconds!
        // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
         h = dht.readHumidity();
        // Read temperature as Celsius (the default)
         t = dht.readTemperature();
    //    // Read temperature as Fahrenheit (isFahrenheit = true)
    //    float f = dht.readTemperature(true);

        // Check if any reads failed and exit early (to try again).
        if (isnan(h) || isnan(t)/* || isnan(f)*/) {
            Serial.println(F("Failed to read from DHT sensor!"));
     //       return;
        }
    //    // Compute heat index in Fahrenheit (the default)
    //    float hif = dht.computeHeatIndex(f, h);
    //    // Compute heat index in Celsius (isFahreheit = false)
    //    float hic = dht.computeHeatIndex(t, h, false);
        Serial.print(F("Humidity: "));
        Serial.print(h);
        Serial.print(F(" %\t"));
        Serial.print(F("Temperature: "));
        Serial.print(t);
        Serial.print(F(" *C\n"));
    //        Serial.print(f);
    //        Serial.print(" *F\t");
    //        Serial.print("Heat index: ");
    //        Serial.print(hic);
    //        Serial.print(" *C ");
    //        Serial.print(hif);
    //        Serial.println(" *F");

        lcd.setCursor(0, 0);
        lcd.print(F("H:"));
        lcd.print(h);
        lcd.print(F("% T:"));
        lcd.print(t);
        lcd.print(F("*C"));
        lastConnectionTime=millis();
    }
        if ((millis() - lastUpdateTime > updateInterval) && isCheckIn) {
            printTime();
             int val;    //定義變量
            int dat;    //定義變量
            dat = analogRead(A1);    // 讀取傳感器的模擬值并賦值給dat
            val = dat * (4.76 / 1023.0 * 100);
            UPDATE_BEGIN(DEVICEID);//上傳接口數據
            UPDATE_V(INPUTID1, val); //V1
            UPDATE_V_NEXT();
            UPDATE_V(INPUTID2, h); //V2
            UPDATE_V_NEXT();
            UPDATE_V(INPUTID3, t); //V3
            UPDATE_V_NEXT();
            UPDATE_V(INPUTID4, digitalRead(8)); //Pin8
            UPDATE_END();
        }

        if (serial_stream.available()) {
            /* First, skip any accidental whitespace like newlines. */
            serial_stream.skip();
        }
        if (serial_stream.available()) {
            /* Something real on input, let's take a look. */
            aJsonObject *msg = aJson.parse(&serial_stream);
            processMessage(msg);
            aJson.deleteItem(msg);
        }
    }

    void checkIn() {
        if (!client.connected()) {
            Serial.println(F("connection failed"));
            client.stop();
            isCheckIn = false;
            client.connect(server, port);
            Serial.println(F("connecting..."));
            delay(10000);
        } else {
            Serial.println(F("connection success"));
            client.print(F("{\"M\":\"checkin\",\"ID\":\""));
            client.print(DEVICEID);
            client.print(F("\",\"K\":\""));
            client.print(APIKEY);
            client.println(F("\"}"));
            lastCheckInTime = millis();
            Serial.println(F("checking..."));
            PULSE();        // Emits pulses
        }
    }

    void processMessage(aJsonObject *msg) {
        aJsonObject* method = aJson.getObjectItem(msg, "M");
        aJsonObject* content = aJson.getObjectItem(msg, "C");
        aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
        String M = method->valuestring;

        // Emits multiple pulses
        PULSE(5);
        Serial.println(M);
    //    char* st = aJson.print(msg);//注意:大緩沖區PRINT_BUFFER_LEN=256字節
    //
    //    if (st != NULL) {
    //        Serial.println(st);
    //        free(st);
            if (M == "checkinok") {
                isCheckIn = true;
                Serial.println(F("check in OK!"));
            }else if(M=="say" ){
                String C=content->valuestring;
                String F_C_ID=client_id->valuestring;
                if(C=="play"){
                    PULSE(3, 250);
                    sayToClient(F_C_ID,"LED on!");
                }else if(C=="stop"){
                    PULSE(3, 100);
                    sayToClient(F_C_ID,"LED off!");
                }else{
                    sayToClient(F_C_ID,"You say "+C);
                }
            }
    //    }
    }

     

     

    building log:

     

    bigiot/learn01/Release/learn01.elf  :
    section            size      addr
    .data               368   8388864
    .text             29444         0
    .bss                918   8389232
    .comment             17         0
    .debug_aranges     6688         0
    .debug_info      365660         0
    .debug_abbrev     48709         0
    .debug_line       42898         0
    .debug_frame      25208         0
    .debug_str        46477         0
    .debug_loc       150009         0
    .debug_ranges      8616         0
    Total            725012


    Finished building

     

    国产综合在线