因此,您对使用的部件有基本的了解,我有:
-
Arduino Uno
-
Seeed Studio GPRS Shield v2.0(http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0)
-
Adafruit V3.3终极GPS(https://www.adafruit.com/products/746?gclid=Cj0KEQjw3-W5BRCymr_7r7SFt8cBEiQAsLtM8qn4SCfVWIvAwW-x9Mu-FLeB6hLmVd0PAPVU8IAXXPgaAtaC8P8HAQ)
这是我的问题:我已经测试了堆叠有GPRS屏蔽的Arduino,它在通过TCP访问互联网,发送短信等方面工作正常 . 但是,我的应用程序要求我从adafruit GPS发送GPS数据到我已用Django和postgresql编写的Web服务器 . 后端已设置完毕 .
我需要将数据从Uno(客户端)发送到我的笔记本电脑(服务器),我在python中编码(这只是为了检查它是否正在创建连接):
#!/usr/bin/env python
import socket
# import postgres database functions
TCP_IP = '192.168.1.112'
TCP_PORT = 10000
BUFFER_SIZE = 40
server_address = (TCP_IP,TCP_PORT)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created.'
# Bind socket to TCP server and port
try:
s.bind(server_address)
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket Bind Complete.'
# Start Listening on socket
s.listen(1) # Puts socket into server mode
print 'Listening on port: ', TCP_PORT
# Now Keep Talking with the client
while (1):
# Wait to accept a connection
conn, addr = s.accept() # Wait for incoming connection with accept()
print 'Connection address:', addr
data = conn.recv(BUFFER_SIZE)
if not data: break
print "recieved data: data", data
conn.send(data) #echo
conn.close()
我不认为这有问题 . 从这里我将数据发布到我的postgreSQL数据库 . 但是,当我尝试使用SIM900模块上的AT命令使用端口10000连接到服务器时,我无法连接:
AT+CIPSHUT
SHUT OK
AT+CGATT?
+CGATT: 1
OK
AT+CIPMUX=0
OK
AT+CSTT="fast.t-mobile.com","",""
OK
AT+CIICR
OK
AT+CIFSR
6.60.94.49
AT+CIPSTART="TCP","192.168.1.112,"10000"
OK
STATE: TCP CLOSED
CONNECT FAIL
我尝试通过TCP连接并用下面的语句替换了AT CIPSTART行并且它工作正常,所以我知道TCP有效:
AT+CIPSTART="TCP","www.vishnusharma.com", "80"
IP我用错了吗?我是新手,但如果它有所不同,我在我的Mac OSX上使用Ubuntu 16.04分区 . 我还检查了APN的T-mobile,看起来很好 .
任何帮助将不胜感激 . 谢谢!
2 回答
您正在使用的IP位于NAT内,因为它以192.168开头 . 除非您与移动运营商有私人移动电话,否则您无法通过公共IP与您的Ubuntu联系 . 您的ISP为您提供了一个由您的路由器管理的公共IP地址,因此如果您希望这样做,您必须从路由器到您的Ubuntu进行port forwarding .
要进行端口转发,您必须进入路由器's configuration page (Typically 192.168.1.1 but depends on the model) an there you' ll必须将端口XXX重定向到192.168.1.112:10000 . 之后,您必须获取公共IP(
curl ifconfig.co
)并使用它从SIM900进行访问 .首先作为建议,您可以使用SIM908组合两个防护罩(除非您在GPS防护罩上获得更高的精度) . 由于您的TCP连接正常,我打赌您的ubuntu上的端口10000被防火墙阻止 . 您可以先尝试关闭防火墙,看看它是否有效 . 如果它不起作用的话 . 如果有效,请使用以下命令解锁防火墙,然后取消阻止tcp端口: