Не могу отправить данные в Firebase с помощью AT-команд

Я использую Arduino с модемом GSM, чтобы попытаться отправить данные в firebase. Однако, когда я пытаюсь это сделать, я получаю следующую ошибку:

SEND OK HTTP/1.1 400 Bad Request Server: nginx Date: Mon, 27 May 2019 22:34:09 GMT Content-Type: text/html Content-Length: 166 Connection: close Strict-Transport-Security: max-age=31556926; includeSubDomains; preload

400 Bad Request

400 Bad Request


nginx

CLOSED

Я выдаю следующие AT-команды:

AT+QIOPEN = "TCP", "drone-polution.firebaseio.com", 443 OK

CONNECT OK

AT+QISEND

>

POST /NewDB/.json

Accept: application/json

Content-Type: application/json

Content-Length: 9

{"a":"b"}

Последняя строка — фактическая полезная нагрузка.

Любая помощь приветствуется.

Какой у вас тип модема? Вы пытались отправить запрос на httpbin.org/post?

Masoud Rahimi 28.05.2019 04:34

Тип модема — MC20, устройство — плата отслеживания WIO: www.seeedstudio.com/…

R0b0tn1k 28.05.2019 09:09

Можете ли вы указать все AT-команды, которые вы вызываете с первого момента запуска модема? Я имею в виду, может быть, вы неправильно настроили модем перед отправкой HTTP-запроса.

Masoud Rahimi 28.05.2019 09:34

Не уверен, отчасти потому, что библиотека arduino заранее позаботится об отправке некоторых команд. Вы можете найти последовательность AT-команд, которые выдает библиотека, здесь: github.com/Seeed-Studio/Seeed_Wio_GPS_Board/blob/master/…

R0b0tn1k 28.05.2019 09:52

Кстати, я попытался опубликовать на httpbin, я получаю ОТПРАВИТЬ ОК, но не получаю никаких отзывов, поэтому не уверен, что это сработало.

R0b0tn1k 28.05.2019 09:52

Я не уверен в этих библиотеках, но я предлагаю вам сначала попробовать ручной способ. На самом деле, это легко, просто нужно настроить некоторые параметры на модеме. Если вы отправите какой-либо запрос в виде POST на httpbin, он вернет вам ваш запрос в качестве ответа. Если вы получаете правильные значения, это означает, что модем работает нормально.

Masoud Rahimi 28.05.2019 10:22

У вас есть идеи, как вернуть значение? Поскольку я тестирую с помощью командной строки, вводя команды в оболочке непосредственно в модем перед тестированием в Arduino. Но проблемы прямо сейчас в оболочке, которая напрямую общается с модемом. Когда я отправляю запрос на httpbin, я ничего не получаю в ответ, просто ОТПРАВИТЬ OK

R0b0tn1k 28.05.2019 13:18

Я опубликую ответ, попробуйте использовать его, а затем отредактирую.

Masoud Rahimi 28.05.2019 13:48
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
8
1 070
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, попробуйте это запрограммировать чип SAM для создания интерфейса между модемом и вашим консольным ПК (я обнаружил, что в MC20_Arduino_Interface.h есть хорошие готовые функции, которые вы можете настроить для модема).

Простая программа выглядит так:

#include "MC20_Arduino_Interface.h"

// set serial port that connects to MC20
//#define serialMC20 Serial1

void setup()
{
    //Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
    SerialUSB.begin(115200);
    while (!Serial);

    //Being serial communication witj Arduino and MC20
    serialMC20.begin(115200);
    delay(1000);

    SerialUSB.println("Setup Complete!");
}

void loop()
{
    //Read MC20 output (if available) and print it in Arduino IDE Serial Monitor
    if (serialMC20.available())
    {
        SerialUSB.write(serialMC20.read());
    }
    //Read Arduino IDE Serial Monitor inputs (if available) and send them to MC20
    if (SerialUSB.available())
    {
        serialMC20.write(SerialUSB.read());
    }
}

Кроме того, я предлагаю вам использовать последовательный монитор Arduino для связи.

Если модем запустится успешно, вы увидите SMS Ready и Call Ready в последовательном мониторе. Согласно документам Quectel HTTP для запроса POST:

3.2. Отправить запрос POST на HTTP-сервер

AT+QIFGCNT=0
OK
AT+QICSGP=1,"CMNET" //Set APN
OK
AT+QIREGAPP //Optional
OK
AT+QIACT //Optional
OK
AT+QHTTPURL=58,30 //Set URL
CONNECT
<Input data>
//For example, input 58 bytes:
http://api.efxnow.com/DEMOWebServices2.8/Service.asmx/Echo
OK
//POST the data whose size is 18 bytes and the maximum latency time for inputting is 50s.
//It is recommended to set the latency time as long as enough to download all the data in the latency time.
AT+QHTTPPOST=18,50,10
CONNECT
//This means module enters into data mode and is ready to receive data from UART.
//For example, input 18 bytes: Message=helloworld.
OK
//This means all data has been received, and DCD is set to high.
AT+QHTTPREAD=30 //Read the response of HTTP server.
CONNECT
<Output data> //Output the response data of HTTP server to UART.
//For example, UART outputs:
<?xml version = "1.0" encoding = "utf-8"?>
<string xmlns = "https://api.efxnow.com/webservices2.3">Message='helloworld' ASCII:104 101 108 108
111 119 111 114 108 100 </string>
OK
AT+QIDEACT //Deactivate PDP context.
DEACT OK

Например, для httpbin.org/post это будет выглядеть примерно так:

16:45:56.416 -> AT+QIFGCNT=0
16:45:56.416 -> OK
16:46:02.918 -> AT+QICSGP=1,"mtnirancell"
16:46:02.918 -> OK
16:46:07.850 -> AT+QIREGAPP
16:46:07.850 -> OK
16:46:12.275 -> AT+QIACT
16:46:12.275 -> OK
16:46:27.467 -> AT+QHTTPURL=23,60
16:46:27.467 -> CONNECT
16:46:27.467 -> <http://httpbin.org/post>
16:46:36.965 -> OK
16:46:36.965 -> 
16:46:48.786 -> AT+QHTTPPOST=18,50,10
16:46:48.786 -> CONNECT
16:46:48.786 -> <message=helloworld>
16:47:02.094 -> OK
16:47:02.094 -> 
16:47:06.569 -> AT+QHTTPREAD=30
16:47:06.569 -> CONNECT
16:47:06.569 -> {
16:47:06.569 ->   "args": {}, 
16:47:06.569 ->   "data": "", 
16:47:06.569 ->   "files": {}, 
16:47:06.569 ->   "form": {
16:47:06.569 ->     "message": "helloworld"
16:47:06.569 ->   }, 
16:47:06.569 ->   "headers": {
16:47:06.569 ->     "Accept": "*/*", 
16:47:06.569 ->     "Content-Length": "18", 
16:47:06.569 ->     "Content-Type": "application/x-www-form-urlencoded", 
16:47:06.602 ->     "Host": "httpbin.org", 
16:47:06.602 ->     "User-Agent": "QUECTEL_MODULE"
16:47:06.602 ->   }, 
16:47:06.602 ->   "json": null, 
16:47:06.602 ->   "origin": "*******, ********", 
16:47:06.602 ->   "url": "https://httpbin.org/post"
16:47:06.602 -> }
16:47:06.602 -> OK

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