无法使用 SIM900 Shield 从 Arduino Uno 通过 TCP 连接到本地机器 IP

Can't connect to local Machine IP through TCP From Arduino Uno using SIM900 Shield

所以你对我使用的部件有了基本的了解,我有:

这是我的问题: 我已经测试了与 GPRS 屏蔽堆叠的 Arduino,它在通过 TCP 访问互联网、发送 SMS 等方面工作正常。但是,我的应用程序要求我将 GPS 数据从 adafruit GPS 发送到我的网络服务器已经用 Django 和 postgresql 编码了。后端已设置。

我需要将数据从 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()

我认为这没有问题。由此我将 post 数据存入我的 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 分区。我还检查了 T-mobile 的 APN,看起来不错。

如有任何帮助,我们将不胜感激。谢谢!

首先作为一个建议,您可以使用 SIM908 将两个盾牌组合起来(除非您的 GPS 盾牌的精度更高)。由于您的 TCP 连接正常,我敢打赌您 ubuntu 上的端口 10000 被防火墙阻止了。您可以先尝试关闭防火墙,看看是否有效。如果它不起作用,那就是别的东西。如果有效,打开您的防火墙,然后使用以下命令取消阻止 tcp 端口:

sudo ufw allow 10000/tcp

您使用的 IP 在从路由器到 Ubuntu 的 NAT since it starts with 192.168. Unless you have a private apn with the mobile operator you're using, you won't be able to reach your Ubuntu from a public IP. Your ISP gives you a public IP address which ir administrated by your router, so if you want this to work, you'll have to do a port forwarding 内。

要进行端口转发,您必须进入路由器的配置页面(通常为 192.168.1.1,但取决于型号),在那里您必须将端口 XXX 重定向到 192.168.1.112:10000。之后你必须获得你的 public IP (curl ifconfig.co) 并使用它从 SIM900 访问。