繁体   English   中英

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

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

因此,您对im正在使用的部分有基本的了解,我有:

这是我的问题:我已经测试了带GPRS屏蔽罩的Arduino,它在通过TCP访问互联网,发送SMS等方面可以正常工作。但是,我的应用程序要求我从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分区。 我还检查了T-mobile的APN,看起来还不错。

任何帮助将不胜感激。 谢谢!

您使用的IP位于NAT内部,因为它以192.168。开头 除非您与正在使用的移动运营商拥有私有apn,否则您将无法通过公共IP访问Ubuntu。 您的ISP为您提供了一个由路由器管理的公共IP地址,因此,如果您希望此地址正常工作,则必须进行从路由器到Ubuntu的端口转发

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

首先,建议您使用SIM908组合两个屏蔽(除非您在GPS屏蔽上获得了更高的精度)。 由于您的TCP连接正常,我敢打赌ubuntu上的端口10000被防火墙阻止了。 您可以首先尝试关闭防火墙,看看它是否有效。 如果没有奏效,那就别的了。 如果可行,请打开防火墙,然后使用以下命令取消阻止tcp端口:

sudo ufw allow 10000/tcp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM