[Solved]:FiPy socket.connect command
-
Thanks a ton @jmarcelino. My problem is solved, added the following right after lte.connect(cid=3), and before s=socket.socket....
while not lte.isconnected(): time.sleep(0.25)
and edited the s.connect to :
address = socket.getaddrinfo('123.45.67.89',4949) #update with you own server IP, print(address) s.connect(address[0][-1])
One minor problem still exists, which I need to look investigate further...maybe tomorrow, the code works once...top to bottom as expected , but if I press "reset" the code executes again as expected, but modem fails to attach...CSQ is 99,99. So far I have seen, if I do power-down-up it works again...but not with reset. Maybe I should run it in loop every 5-10 minutes and check.
@administrators, @jmarcelino
Per my last forum topic: https://forum.pycom.io/topic/3201/solved-fipy-cat-m1-connection
I am able to connect to the Verizon network with my FiPy, but as I modified the code to post data to my server I am getting an unexpected error with s.connect((host,port)). I even tried
addr=(host,port)
s.connect(addr) instead of s.connect((host,port)) but same error each time.
Here is my code block and errorfrom network import LTE #from socket import * import socket import ssl import time import sys import pycom host='abc.dyndns.org' # replaced actual host name portion with "abc" port=4949 addr=(host,port) pycom.heartbeat(False) print('Pycom module and firmware version:%s' % os.uname()) lte = LTE(carrier="verizon") # instantiate the LTE object lte.attach(band=13) # attach the cellular modem to a base station, initially it was lte.attch() print('FiPY is attached to network') time.sleep(0.25) pycom.rgbled(0x0000ff) # BLUE LED while not lte.isattached(): print('While not attached yet, signal:%s'%lte.send_at_cmd('AT+CSQ')) lte.send_at_cmd('AT+CSQ') print('While not attached yet, status:%s '%lte.send_at_cmd('AT+CEER')) lte.send_at_cmd('AT+CEER') time.sleep(.25) # originally 0.25 changed to 5.0 if unseccful in connecting lte.attach(band=13) lte.connect(cid=3) # start a data session and obtain an IP address print('Connected to LTE-CATM1') pycom.rgbled(0x00ff00) # GREEN LED s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print('Socket created') s.settimeout(5.0) #s.connect((host, port)) # tried this as well s.connect(addr) print('Socket Bind Complete....moving to send data ') #s.listen(10) s.send('1~660832~05/08/1501:00A0A141E28323C4650~') #data=s.recv(1024) s.close() #print('Received:, repr(data)') lte.disconnect() lte.dettach() pycom.rgbled(0xff0000) # RED LED print( " Reached EOP")
Terminal output:
>>> os.mkfs('/flash') >>> Uploading project (main folder)... Reading file status Failed to read project status, uploading all files Creating dir workspaceStorage Creating dir workspaceStorage/bc895fb1973b5d5624b4a2ed2625b38c Creating dir workspaceStorage/d0c7d1ef2572273c369bbcf44005cf73 [1/5] Writing file main.py [2/5] Writing file pymakr.json [3/5] Writing file settings.json [4/5] Writing file workspaceStorage/bc895fb1973b5d5624b4a2ed2625b38c/meta.json [5/5] Writing file workspaceStorage/d0c7d1ef2572273c369bbcf44005cf73/meta.json Upload done, resetting board... ets Jun 8 2016 00:22:57 rst:0x7 (TG0WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff8028,len:8 load:0x3fff8030,len:1728 load:0x4009fa00,len:0 load:0x4009fa00,len:14584 entry 0x400a059c Pycom module and firmware version:(sysname='FiPy', nodename='FiPy', release='1.17.3.b1', version='v1.8.6-849-83e2f7f on 2018-03-19', machine='FiPy with ESP32', lorawan='1.0.2', sigfox='1.0.1') FiPy is attached to network Connected to LTE-CATM1 Socket created Traceback (most recent call last): File "main.py", line 36, in <module> ValueError: invalid arguments MicroPython v1.8.6-849-83e2f7f on 2018-03-19; FiPy with ESP32 Type "help()" for more information. >>>
Please advise.Thanks much!!
-
Hi @dda
socket.connect doesn't take a domain name, you need to resolve it first into a tuple like this - (family, type, proto, canonname, sockaddr) - which you can obtain from socket.getaddrinfo()
In your case doing:
s.connect(socket.getaddrinfo(addr, port)[0][-1])
should do what you want.
There currently isn't a way to obtain your assigned IP address.
-
@administrators @jmarcelino @daniel @robert-hh @timh
Any body any suggestions, I am still stuck! Thanks
-
Also, once connected how do I find the assigned IP address of the FiPy? Use AT+CGPIAF?