首页 文章

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

提问于
浏览
0

因此,您对使用的部件有基本的了解,我有:

这是我的问题:我已经测试了堆叠有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 回答

  • 0

    您正在使用的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进行访问 .

  • 1

    首先作为建议,您可以使用SIM908组合两个防护罩(除非您在GPS防护罩上获得更高的精度) . 由于您的TCP连接正常,我打赌您的ubuntu上的端口10000被防火墙阻止 . 您可以先尝试关闭防火墙,看看它是否有效 . 如果它不起作用的话 . 如果有效,请使用以下命令解锁防火墙,然后取消阻止tcp端口:

    sudo ufw allow 10000/tcp
    

相关问题