Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

    Выходит с 17 июля 2008 г. цена договорная

    Опрос

    конечно, он настанет в 2012 г.
    да, но не в 2012 г.
    нет, это фантастика
    а что такое конец света
    а мне пофиг - я буду уже мертв



    Календарь
    «    Май 2013    »
    ПнВтСрЧтПтСбВс
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031 

    Архив новостей
    Март 2022 (1)
    Декабрь 2021 (1)
    Август 2021 (1)
    Июль 2021 (3)
    Февраль 2021 (3)
    Январь 2021 (1)

    Информация
    Arduino + w5100 + GET
    Arduino
    автор: dimon, опубликовано: 2 мая 2013

    Посмотрим как передать данные GET запросом на web-сервер с помощью Ethernet W5100 Shield Network Expansion Board w/ Micro SD Card Slot.
    Для этого напишем простой скетч, который будет принимать по com-порту строку, выводить ее на экран 1602 вместе с количеством принятых строк, делать эхо этой строки в com-порт, и отсылать на веб-сервер ее с помощью GET запроса. В запросе так же передается переменная code, которая является как бы паролем для скрипта на сервере – если эта переменная не совпадет с той, которая записана в скрипте данные будут отброшены. В случае совпадения "пароля ", принятая строка будет записана в текстовый файл.
    Это простой пример. Но при желании можно подправить файл rwg.php, который на стороне сервере и обрабатывает принятый GET запрос так чтобы он записывал принятую переменную в базу данных MySQL. Обработка же принятых данных ограничивается только Вашим воображением fellow
    Можно, например, каждую минуту передавать значение температуры, а потом строить красивые развернутые по времени графики.

    Т.к. шилд использует digital пины 4 (низкий уровень – выбор картридера на шилде), 10 (низкий уровень – выбор ethernet на шилде), 11 (SPI bus – MOSI), 12 (SPI bus – MISO), 13 (SPI bus – CLK), а в наших ранних примерах эти пины использовал дисплей, то придется переподключить дисплей на другие цифровые выходы.

    Скетч с кучей комментариев, надеюсь, не требует дополнительных пояснений:

    /*
    Баловство с w5100 и com-портом
    Будем принимать по com-порту строку, выводим ее на экран и передавать ее POST на web-сервер
    
    Оборудование:
    - дисплей 1602, потенциометр для подсветки дисплея
    - Ethernet W5100 Shield Network Expansion Board w/ Micro SD Card Slot
    - web server
    
    Подключение дисплея 1602:
    Контакт дисплея  	Контакт Arduino	             Значение
      1	                       GND                   Vss
      2                            5V                    Vdd
      3                            GND	             Vo (контрастность)
      4	                       digital 9	     RS
      5	                       digital 8             R/W
      6	                       digital 7             ENABLE
      11	                       digital 6	     DB4
      12	                       digital 5	     DB5
      13	                       digital 3	     DB6
      14                           digital 2	     DB7
      15	                       5V	             LED+
      16                           GND	             LED-
    
    Подключение W5100:
    Обмен данными между Ардуиной и Шилдом происходит по SPI.
    Низким уровнем на digital выводе выбирает ведомое устройство на шине SPI:
    выбор SD - digital 4
    выбор ethernet - digital 10
    
     * SD card attached to SPI bus as follows:
     ** MOSI - pin 11
     ** MISO - pin 12
     ** CLK - pin 13
     ** CS - pin 4
    
     */
     
     
     
     // подключаем библиотеки
     #include <LiquidCrystal.h>    // для работы с LCD
     #include <SPI.h>              // для работы с SPI
    // #include <SD.h>             // для работы с SD
     #include <Ethernet.h>         // для работы с Ethernet
     
    
     // инициализируем LCD, указывая контакты данных
     LiquidCrystal lcd(9, 8, 7, 6, 5, 3, 2);
    
    
    // задаем переменные
    boolean receiveFlag = false;      // флаг что было что-то принято через com-порт
    String myString;                  // строка
    int Count = 1;                    // счетчик
    int selectEthernet = 10;          // выбор ведомого на шилде - Ethernet
    int selectSd = 4;                 // выбор ведомого на шилде - SD
    
    byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};   // mac адрес
    byte ip[] = {192, 168, 1, 200};                      // ip если не получим из DHCP
    byte gateway[] = {192, 168, 1, 1};                   // gateway
    byte subnet[] = {255, 255, 255, 0};                  // маска сети
    byte remote_ip[] = {192, 168, 1, 104};               // адрес сервера
    
    // включим Ethernet
    #define SWITCH_TO_W5100 digitalWrite(selectSd,HIGH); digitalWrite(selectEthernet,LOW);
    // включим SD
    #define SWITCH_TO_SD digitalWrite(selectEthernet,HIGH); digitalWrite(selectSd,LOW);
    // выключим и SD и Ethernet
    #define ALL_OFF digitalWrite(selectEthernet,HIGH); digitalWrite(selectSd,HIGH);
    
    
    // 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;
    
    
     
     void setup() {
       
       
       // красивая "загрузка" программы при старте :)
        lcd.begin(16, 2);
        lcd.print("Loading");
        delay(500);                // ждем 0.5 секунды
        lcd.print(".");
        delay(500);                // ждем 0.5 секунды
        lcd.print(".");
        delay(1000);               // ждем 1 секунду
        lcd.clear();               //очистка экрана
      
     
        Serial.begin(9600); // инициализируем передачу данных по COM-порту
        Serial.println("Start "); //   
    
        // Задаем режим работы портов  
        pinMode(selectEthernet, OUTPUT);
        pinMode(selectSd, OUTPUT);
        // высокий уровень на обоих - не выбран ведомый на SPI
        digitalWrite(selectEthernet, HIGH);
        digitalWrite(selectSd, HIGH);
    
     
        // старт Ethernet подключения
        Serial.println("Trying to get an IP address using DHCP");
        if (Ethernet.begin(mac) == 0) 
          {
           Serial.println("Failed to configure Ethernet using DHCP");
           // инициализируем без использования DHCP
           Ethernet.begin(mac, ip, gateway, subnet);
           // пауза 1 секунда - чтобы shield успел инициализироваться
           delay(1000);
           }
          // выведем локальны IP адрес
          Serial.print("My IP address: ");
          for (byte thisByte = 0; thisByte < 4; thisByte++)  
            {
            // печатаем каждый байт IP адреса
            Serial.print(Ethernet.localIP()[thisByte], DEC);
            Serial.print("."); 
            }
          Serial.println(""); 
         
         
    }
     
     void loop() {
    
            
         
        // проверяем буфер com-порта - было ли что-то принято
        if (Serial.available() > 0)     //если есть доступные данные считываем строку
            {  
                
            while (Serial.available() > 0) 
              {
              int inChar = Serial.read();  // считываем символ
              myString += (char)inChar;    // формируем строку
              }  
              
     
            // устанавливаем флаг что нужно обработать принятые данные
            receiveFlag = true; 
         
            // Serial.flush(); // очистим буфер
           
            }
    
    
    
    
        // если флаг receiveFlag установлен - значит что-то приняли. Обработаем 
        if (receiveFlag == true)
          {
          
          // выводим принятую переменную на экран
          lcd.clear();              //очистка экрана
          
          lcd.setCursor(13, 0);     // устанавливаем курсор в 12-ом столбце, 1 строке
          lcd.print(Count);         // выводим кол-во итераций
    
          lcd.setCursor(0, 1);      // устанавливаем курсор в 0-ом столбце, 2 строке
          lcd.print(myString);      // выводим myString на экран
    
          // эхо в com-порт
          Serial.print("String: "); // 
          Serial.println(myString); // эхо myString в com-порт
    	 
    
          // отправим на сервер remote_ip GET запрос 
    
            // выберем ведомого SPI = включим ethernet        
            SWITCH_TO_W5100;
            
            // если удалось подключиться
            if (client.connect(remote_ip, 80)) 
              {
              Serial.println("connected. Send GET");
              
              // отправка GET
              client.print("GET /arduino/rwg.php?q=");
              client.print(myString);
              client.print("&code=Std3fOry1GfizfT309Hytcklt31"); // защитный код
              client.println(" HTTP/1.1");
              client.println("Host: tudimon.com"); // почему то без этой строки сервер игнорит
                                                   // хотя во всех примерах этой строки нет
              client.println("Connection: close");
              client.println();
    
              // рвем соединение
              client.stop();
              } 
            else 
              {
              // почему то не удалось подключиться к серверу
              Serial.println("connection failed");
              }   
         
    
            
            // отключим шилд от шины SPI (отключим все)
            ALL_OFF; 
    
    
          // подотрем за собой :)
          receiveFlag = false;      // сбрасываем флаг
          myString = "";            // очистка строки
          
          Count++;         // инкремент счетчика 
          
          
          }
    	 
    	 
         delay(1000);     // задержка перед повторением 
    
    
     }
    


    Com-порт, переданные строки:
    com-порт, переданные строки


    Тестовый файл на сервере - те же самые строки:
    Принятые веб-сервером строки


    Файлы скрипта (rwg.php), который работает на стороне сервера:
    arduino__get.rar [1,06 Kb] (cкачиваний: 190)

     
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.

    Другие новости по теме:

  • Arduino + w5100 + SD
  • Arduino com-port echo
  • Arduino + аналоговый температурный датчик LM35
  • Баловство с кнопками на Arduino
  • Ethernet погодная станция


  • Комментарии:

    Оставить комментарий



     
    Информация
     
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


    Поиск по сайту:


    Облако тегов
    Arduino, backup, CentOS, cmd, div, DLE, DLE хаки, domoticz, dzvents, event, Home Assistant, HomeAssistant, Linux, log, LUA, Monster, ogf3, Template, VBS, w2k8, windows, WSH, xiaomi, бумага, бумажный самолетик, верстка, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, уведомления, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    раскрутка сайта бесплатно
    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2021 by dimon - all right reserved!
    Тираж:           экземпляров.   Дизайн, верстка by dimon