Как отправить данные из SIM900 HTTP GET в базу mySQL (там 75%?) - PullRequest
0 голосов
/ 07 августа 2020

Спасибо, что нашли время прочитать мой пост. Я попробую просто осветить то, что, по моему мнению, важно для проблемы, но я не профессиональный программист, поэтому, пожалуйста, потерпите меня.

У меня есть модуль SIM900 с Arduino Mega, и я пытаюсь использовать http get функцию для отправки данных в базу данных mySQL. Я успешно использовал SIM900 для создания текстовых файлов на моем сервере .ftp, поэтому я знаю, что он в какой-то степени работает, только не с функцией http. У меня есть сценарий. php, который отлично работает, когда я использую его в своем браузере (например, посещение «mysite.epizy.com/senddata.php?sensor69=69» вернет в браузере:

Массив ([sensor69] => 69 [__test] => dfc33491ff131abef9348da81e436528 [_ga] => GA1.2.428043981.1572933465)

Когда я пытаюсь подключиться к SIM900, я получаю следующее на мой серийный номер:

    setting connection type
AT+SAPBR=3,1,"CONTYPE","GPRS"

OK

AT+SAPBR=3,1,"APN","WWW.vodafone.net.nz"

OK

AT+SAPBR=1,1

ERROR

AT+SAPBR=2,1

+SAPBR: 1,1,"121.90.164.49"

OK

AT+HTTPINIT

OK

AT+HTTPPARA="CID",1

OK

AT+HTTPPARA="URL","mysite.epizy.com/send_data.php?sensor69=69"



OK

AT+HTTPACTION=0

OK
⸮⸮

+HTTPACTION:0,200,859
⸮
AT+HTTPREAD

+HTTPREAD:859
<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&ar
AT+HTTPTERM

OK

Как мы видим, функция HTTPREAD возвращает 859 символов, но это кажется усеченным, и в моей базе данных или файле журнала нет регистрации (создается / обновляется в. php) Это мой. php скрипт "senddata. php"

<?php

print_r($_REQUEST);

    //log php activation
 

date_default_timezone_set("Pacific/Auckland");

$my_file = 'log.txt';
$handle = fopen($my_file, 'a') or die('Cannot open file:  '.$my_file);
$new_data = "\n"."Module=".$_GET['moduleID'].", ". date("d:m:Y")." ". date("h/i/sa");
fwrite($handle, $new_data);
fclose($handle);

// Prepare variables for database connection
    $dbusername = "epiz_69696969";  // enter database username, I used "arduino" in step 2.2
    $dbpassword = "69696969696969";  // enter database password, I used "arduinotest" in step 2.2
    $server = "sql169.epizy.com"; // IMPORTANT: if you are using XAMPP enter "localhost", but if you have an online website enter its address, ie."www.yourwebsite.com"


    $moduleID=$_GET['moduleID'];

    // Connect to your database

    $dbconnect = mysql_pconnect($server, $dbusername, $dbpassword);
    $dbselect = mysql_select_db("epiz_24743320_testData",$dbconnect);

    // Prepare the SQL statement

    $sql = "INSERT INTO simData2 (moduleID) VALUES ('$moduleID')";


    // Execute SQL statement

    mysql_query($sql);
    mysql_close();

?>

Вот раздел моего кода Arduino для http-соединения:

void httpConnect() {
 
    myGsm.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); // Set type of internet connection to GPRS context
    delay(1000);
    Serial.println(" setting connection type");
    printSerialData();
    myGsm.println("AT+SAPBR=3,1,\"APN\",\"WWW.vodafone.net.nz\""); // Set access point name
    delay(1000);
    printSerialData();
    myGsm.println("AT+SAPBR=1,1"); // Enable GPRS connection
    delay(1000);
    printSerialData();
    myGsm.println("AT+SAPBR=2,1");  // To check connection status
    delay(5000);
    printSerialData();
    
    myGsm.println("AT+HTTPINIT");                  // Initialize HTTP
    delay(500);
    printSerialData();
    myGsm.println("AT+HTTPPARA=\"CID\",1");    // End the PARA ???
    delay(500);
    printSerialData();
    
    myGsm.print("AT+HTTPPARA=\"URL\",\"mysite.epizy.com/send_data.php?sen69=69\""); // Send PARA command, set url to send data
        
            
    
    
           delay(2000);
    printSerialData();
       delay(2000);
    printSerialData();
    myGsm.println("");   // close url
    Serial.println("");
    delay(500);
    printSerialData();
    delay(500);
    myGsm.println("AT+HTTPACTION=0"); //HTTP method 0-get 1-post 2-head
    delay(1000);
    printSerialData();
        delay(1000);
    printSerialData();
        delay(2000);
    printSerialData();
            delay(2000);
    printSerialData();
            delay(2000);
    printSerialData();
    myGsm.println("AT+HTTPREAD");
            delay(2000);
    printSerialData();
        delay(2000);
    printSerialData();
            delay(2000);
    printSerialData();
    myGsm.println("AT+HTTPTERM");
    delay(100); 
    printSerialData();     

}

Если кто может помочь пролить свет на то, почему модуль SIM900 не работает для активации моего. php вообще, любая помощь будет очень признательна.

Ура

1 Ответ

0 голосов
/ 10 августа 2020

Я решил проблему. Оказывается, для сервера, который я использовал (epizy.com (бесконечность бесплатно)), требуется javascript возможностей, которых нет у SIM900 (по крайней мере, в моей текущей настройке). Я создал новый сервер с помощью heroku, используя почти тот же файл. php (база данных postgreSQL не mySQL, поэтому некоторые небольшие изменения), и теперь я успешно отправляю данные в базу данных по мере необходимости. Я до сих пор не разрешил усечение последовательных ответов, но это не обязательно для той функциональности, которую я ищу.

...