Управление ардуинкой с web сервера

Тема в разделе "Arduino & Shields", создана пользователем duchess, 15 мар 2017.

  1. user999

    user999 Гик

    Напишите после
    Код (C++):
    char c = GPRS.SHILD.read()
    Код (C++):
    Serial.print(c);
    Увидите ответ сервера. Он состоит не из одной единицы
     
  2. duchess

    duchess Нуб

    Он почему-то уже вообще не хочет выводить ничего
     

    Вложения:

  3. duchess

    duchess Нуб

    А, вот, вывел наконец
     

    Вложения:

  4. user999

    user999 Гик

    Вы в php файле формируете страницу <html><head><body> и т.д. А нужно просто единицу вывести. И как то отделить заголовок +HTTPREAD: 31OK! от тела
     
  5. duchess

    duchess Нуб

    сделал, но все ровно опять такая же фигня, не может сразу изменить и до сих пор
     
  6. duchess

    duchess Нуб

    Вот что я сделал, но почему-то у меня он не может достучаться до сервера, а в контенте выводит почему-то последнюю AT команду, уже пытался по разному сделать и никак не выходить. Не могу понять в чем дело, вроде в php коде точно ошибок нет, а в самой программе ссылка тоже верная, но почему-то присылает что в HTTPACTION ничего нет. Подскажите пожалуйста. Вот мой код:
    Код (C++):
    #include <GPRS_Shield_Arduino.h>
    #include <sim900.h>
    #include <SoftwareSerial.h>

    SoftwareSerial GPRS_SHILD(4, 5); // RX, TX
    GPRS gprs1(GPRS_SHILD,6,7); // PK = 10, ST = 11

    int led1 = 8;
    int led2 = 9;

    char server[] = "remote-motor.ru";
    int port = 80;

    void setup() {

      pinMode(led1, OUTPUT);
      pinMode(led2, OUTPUT);
      digitalWrite(led1,HIGH);
      digitalWrite(led2,LOW);
     
      gprs1.powerOn();
      Serial.begin(19200);
      while (!Serial) {
      }
      Serial.print("Serial init OK\r\n");
      // открываем Serial-соединение с GPRS Shield
      GPRS_SHILD.begin(19200);
      while (!gprs1.init()) {
        delay(1000);
        Serial.print("GPRS Init error\r\n");
      }

       while (!gprs1.join("internet", "gdata", "gdata")) {
        // если GPRS-соединения нет
        // выводим сообщение об ошибке и ждём 1 секунду
        // процесс повторяется в цикле
        // пока не появится положительный ответ от GPRS устройства
        Serial.println("Gprs join network error");
        delay(1000);
      }
     
      Serial.print("IP Address is ");
      Serial.println(gprs1.getIPAddress());

     
      Serial.println("GPRS init success");
      delay(3000);

    }

    void loop() {
      SubmitHttpRequest();
      delay(10000);
    }

    void SubmitHttpRequest(){
      Serial.println("SubmitHttpRequest - started" );

      GPRS_SHILD.println("AT+CSQ"); // Signal quality check

      delay(100);
      ShowSerialData();// this code is to show the data from gprs shield, in order to easily see the process of how the gprs shield submit a http request, and the following is for this purpose too.
     
      GPRS_SHILD.println("AT+CGATT?"); //Attach or Detach from GPRS Support
      delay(100);
      ShowSerialData();
      GPRS_SHILD.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");//setting the SAPBR, the connection type is using gprs
      delay(1000);
      ShowSerialData();
      GPRS_SHILD.println("AT+SAPBR=3,1,\"APN\",\"internet\"");//setting the APN, Access point name string
      delay(4000);
      ShowSerialData();
      GPRS_SHILD.println("AT+SAPBR=1,1");//setting the SAPBR
      delay(2000);
      ShowSerialData();
      GPRS_SHILD.println("AT+HTTPINIT"); //init the HTTP request
      delay(2000);
      ShowSerialData();
     
      GPRS_SHILD.println("AT+HTTPPARA=\"URL\",\"remote-motor.ru/getstate.php?reboot\"");// setting the httppara, the second parameter is the website you want to access
      delay(1000);
      ShowSerialData();
      GPRS_SHILD.println("AT+HTTPACTION=0");//submit the request
      delay(15000);//the delay is very important, the delay time is base on the return from the website, if the return datas are very large, the time required longer.
      ShowSerialData();
      GPRS_SHILD.println("AT+HTTPREAD");// read the data from the website you access
      delay(3000);
      change();
      ShowSerialData();
      GPRS_SHILD.println("");
      delay(100);

      Serial.println("SubmitHttpRequest - finished" );
    }

    void change(){

      String content = "";
      int counter = 0;

      char buffer1[30];
      int size1;

     
       while(GPRS_SHILD.available()!=0)
    {
       // Serial.write(GPRS_SHILD.read());
       // content = content + String(char (GPRS_SHILD.read()));

        buffer1[counter]=GPRS_SHILD.read();
     
        counter++;
    }
      Serial.print("счетчик = ");
      Serial.println(counter);

      Serial.print("контент = ");
      Serial.println(buffer1);
     
    /*
      if(content.substring(1)== "1")
       {
         digitalWrite(led1,LOW);
         digitalWrite(led2,HIGH);
         Serial.print("OK!");
       }else{
        digitalWrite(led1,HIGH);
        digitalWrite(led2,LOW);
        Serial.println("NO!");
       }

       content = "";
    */

      /*
        while (GPRS_SHILD.available())
         {
          char c = GPRS_SHILD.read();
          Serial.print(c);
            if ( c=='1')
            {
              digitalWrite(led1,LOW);
              digitalWrite(led2,HIGH);
              Serial.print("OK!");
            }
            if ( c=='2')
            {
         
              digitalWrite(led1,HIGH);
              digitalWrite(led2,LOW);
              Serial.println("OK!");
            }
          }
         
          GPRS_SHILD.flush();
          */

       

    }

    void ShowSerialData()
    {
      while(GPRS_SHILD.available()!=0)
        Serial.write(char (GPRS_SHILD.read()));
    }
     
     

    Вложения:

  7. user999

    user999 Гик

    Вот этот вот пример переделайте под свой GPRS, пока без светодиодов и прочего. Просто один гет запрос к своему серверу и в сериал ответ сервера. Что получится?
    Код (C++):
    #include <Ethernet.h>
    #include <EthernetClient.h>

    byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
    char server[] = "remote-motor.ru";
    EthernetClient client;

    void setup(){
      Serial.begin(9600);
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
        Ethernet.begin(mac);
      }
    }

    void loop(){
      readDataServer();  
      delay(2000);
    }
    void readDataServer() {
      bool b = 0;
      char s;
        client.connect(server, 80);
        client.print( "GET /getstate.php?reboot");
        client.println(" HTTP/1.1");
        client.print( "Host: " );
        client.println(server);
        client.println( "Connection: close" );
        client.println();
        client.println();
        while(b == 0) {
          if (client.available()) {
            s = client.read();
            Serial.print(s);
          } else {
             b = 1;      
            }
          }
      }
        client.stop();
        client.flush();
    }
     
  8. duchess

    duchess Нуб

    Проблема в том, что я не могу это использовать, так как у меня шилд https://amperka.ru/product/arduino-gprs-shield, который использует библиотеку <GPRS_Shield_Arduino.h> и я не могу использовать даже тот же .connect и .stop, и библиотеку ethernet так как сразу много ошибок выдает и мне нужно сделать как раз таки через этот шилд все. Вот в этом вся и проблема
     
  9. user999

    user999 Гик

    А стандартный скетч GsmWebClient из встроенных библиотек у вас работает?
    Код (C++):
    /*
      Web client

    This sketch connects to a website through a GSM shield. Specifically,
    this example downloads the URL "http://www.arduino.cc/asciilogo.txt" and
    prints it to the Serial monitor.

    Circuit:
    * GSM shield attached to an Arduino
    * SIM card with a data plan

    created 8 Mar 2012
    by Tom Igoe

    http://www.arduino.cc/en/Tutorial/GSMExamplesWebClient

    */


    // libraries
    #include <GSM.h>

    // PIN Number
    #define PINNUMBER ""

    // APN data
    #define GPRS_APN       "GPRS_APN" // replace your GPRS APN
    #define GPRS_LOGIN     "login"    // replace with your GPRS login
    #define GPRS_PASSWORD  "password" // replace with your GPRS password

    // initialize the library instance
    GSMClient client;
    GPRS gprs;
    GSM gsmAccess;

    // URL, path & port (for example: arduino.cc)
    char server[] = "arduino.cc";
    char path[] = "/asciilogo.txt";
    int port = 80; // port 80 is the default for HTTP

    void setup() {
      // initialize serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }

      Serial.println("Starting Arduino web client.");
      // connection state
      boolean notConnected = true;

      // After starting the modem with GSM.begin()
      // attach the shield to the GPRS network with the APN, login and password
      while (notConnected) {
        if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
            (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
          notConnected = false;
        } else {
          Serial.println("Not connected");
          delay(1000);
        }
      }

      Serial.println("connecting...");

      // if you get a connection, report back via serial:
      if (client.connect(server, port)) {
        Serial.println("connected");
        // Make a HTTP request:
        client.print("GET ");
        client.print(path);
        client.println(" HTTP/1.1");
        client.print("Host: ");
        client.println(server);
        client.println("Connection: close");
        client.println();
      } else {
        // if you didn't get a connection to the server:
        Serial.println("connection failed");
      }
    }

    void loop() {
      // if there are incoming bytes available
      // from the server, read them and print them:
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }

      // if the server's disconnected, stop the client:
      if (!client.available() && !client.connected()) {
        Serial.println();
        Serial.println("disconnecting.");
        client.stop();

        // do nothing forevermore:
        for (;;)
          ;
      }
    }
     
  10. duchess

    duchess Нуб

    Ничего не выводит, так как нету GSM SHIELD ардуиновского, а как подключаю библиотеку от своего шилда, сразу ошибки, только при ее подключении, даже когда подключаю <SoftwareSerial.h>