【问题标题】:sim800 at command post data to serversim800 在命令发布数据到服务器
【发布时间】:2015-10-26 13:00:25
【问题描述】:

我对向远程服务器发送数据感到困惑,我可以发送一个发布请求,但不确定如何添加服务器接收的数据。

我已经浏览了数据表http://www.jarzebski.pl/datasheets/SIM900_https-121018-1.00.pdf

试过了

# usual at+sapbr=1,1 set up
+HTTPINIT
+HTTPPARA = “CID”,1
+HTTPPARA="URL","IP-ADDRESS:PORT"
+httpdata=100,10000
# Where do I add the post data ?
+httpaction=1

发送http post请求。但是如何添加数据 - 我已经尝试将它添加到 url ?key=val 但没有乐趣 - 任何帮助将不胜感激

【问题讨论】:

  • 感谢您找到解决方案!您能否将最新编辑的内容改为答案?在这种情况下,回答您自己的问题是完全可以的,也是正确的做法。

标签: http gsm at-command gprs


【解决方案1】:

httpdata=100,10000 表示 SIM800 应该在 10 秒内预期 100 个字节。

这就是我使用 HTTP 客户端完成此操作的方式:

AT+HTTPINIT
AT+HTTPPARA="CID",1
AT+HTTPPARA="URL","http://url.com/endPoint"
AT+HTTPPARA="CONTENT","application/json"
AT+HTTPDATA=40,10000

此时,SIM800 应以“DOWNLOAD”响应。这意味着它期待您的数据。发送您的数据;就我而言:

{"location_id": 238, "fill_percent": 90}

等待 10 秒以发送其余命令。那么:

AT+HTTPACTION=1
AT+HTTPREAD
AT+HTTPTERM

这对我有用。希望对您有所帮助。

这是我从以下渠道获得信息的:http://www.raviyp.com/embedded/194-sim900-gprs-http-at-commands

在后端,使用 Python Flask,这是我使用的代码

@app.route('/reportTrashLevel', methods=['POST'])
def report_trash_level():
    data = request.get_json()
    database.insert_trash_level(data)

    return Response(status=200)

【讨论】:

  • 能否请您提供在服务器端编写的代码?
  • @alex 我已经编辑了答案以反映我使用的代码
  • 根据文档,此方法可以使用的标头数量有限,因此,如果您有类似授权标头令牌之类的东西,那么您将需要使用@的 TCP 连接样式使用 trojan_spike。
【解决方案2】:

我设法让它做我需要的事情,这个 code-sn-p 可能会帮助其他人

AT+CGATT=1                  # enter GPRS configuration mode 
AT+CIPMUX=0                 # Disable multi IP connection mode.  Single IP cnxn only
AT+CSTT="APN","USER","PASS"
AT+CIICR                    # bring up wireless connection with GPRS and CSD 
AT+CIFSR                    # ip up - gprs working
AT+CIPSHUT                  # Exit GPRS configuration mode

# Now do a post request to remote server api in json format. 
# Change IP_ADDR|DOMAIN for the IP or domain name of your server.  
# Change 2000 to its port
AT+CIPSTART="TCP","IP_ADDR|DOMAIN","2000"

AT+CIPSEND=119 # Num of char in tcp/ip data, \r & \n count as 1 char
POST /post HTTP/1.1
Host: **.**.***.***
Content-Type: application/json
Content-Length:23

{"postkey":"postvalue"}

希望这有助于下一个人坚持下去。

【讨论】:

  • 几年后它做到了——谢谢!我唯一不明白的是 AT+CIPSHUT (关闭连接)。在打开新连接之前有必要这样做吗?在我看到的另一个例子中,它是在发送数据之后使用的,这样比较好理解。
  • 顺便说一句,这适用于 SIM7000,可能还有其他更新的 SIMCOM 芯片。我认为其他答案中提到的 AT+HTTP… 命令不再受支持。
  • 另外,AT+CIFSR 有点不稳定,它不会像人们预期的那样以OK+CIFSR: <ip> 响应。我发现AT+CIFSREX 更可靠(并且由于某种原因更快)。至少SIM7000支持。
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
相关资源
最近更新 更多