M
Hi. I know this may be a little late, but I have some code that enables LTE-CATM1 connection through hologram and to send a message into their socket.
I would also recommend not specifying the carrier because Hologram.io takes care of that.
Here is my code: Also note that hologram.io working with Python requires that you send a bytearray in ASCII format. At least from my testing, that's the only way I could get it to work.
import socket
import time
import pycom
from machine import RTC
from network import LTE
from network import WLAN
HOST = "cloudsocket.hologram.io"
PORT = 9999
DEVICE_KEY = "ABCDEFG" #generated on hologram's portal for each SIM card.
TOPIC = "TOPIC1"
# # Need to use global variables.
# # If in each function you delare a new reference, functionality is broken
lte = LTE()
# Returns a network.LTE object with an active Internet connection.
def getLTE():
# If already used, the lte device will have an active connection.
# If not, need to set up a new connection.
if lte.isconnected():
return lte
# Modem does not connect successfully without first being reset.
print("Resetting LTE modem ... ", end="")
lte.send_at_cmd('AT^RESET')
print("OK")
time.sleep(1)
# While the configuration of the CGDCONT register survives resets,
# the other configurations don't. So just set them all up every time.
print("Configuring LTE ", end='')
lte.send_at_cmd('AT+CGDCONT=1,"IP","hologram"') # Changed this from origninal
print(".", end='')
lte.send_at_cmd('AT!="RRC::addscanfreq band=4 dl-earfcn=9410"') # changed band from 28 to 4. I dont know what earfcn=9410 is;
print(".", end='')
lte.send_at_cmd('AT+CFUN=1')
print(" OK")
# If correctly configured for carrier network, attach() should succeed.
if not lte.isattached():
print("Attaching to LTE network ", end='')
lte.attach()
while(True):
if lte.isattached():
print(" OK")
#pycom.rgbled(0x00FF00)
#time.sleep(.5)
#pycom.rgbled(0x000000)
break
print('.', end='')
time.sleep(1)
# Once attached, connect() should succeed.
if not lte.isconnected():
print("Connecting on LTE network ", end='')
lte.connect()
while(True):
if lte.isconnected():
print(" OK")
break
print('.', end='')
time.sleep(1)
# Once connect() succeeds, any call requiring Internet access will
# use the active LTE connection.
return lte
# Clean disconnection of the LTE network is required for future
# successful connections without a complete power cycle between.
def endLTE():
print("Disonnecting LTE ... ", end='')
lte.disconnect()
print("OK")
time.sleep(1)
print("Detaching LTE ... ", end='')
lte.dettach()
print("OK")
# Program starts here.
try:
lte = getLTE()
print(lte)
s = socket.socket()
print(s)
dns_records = socket.getaddrinfo(HOST, PORT)
print("got dns_records")
print(dns_records)
message = "Hello World!"
for record in dns_records:
try:
s.connect(record[-1])
print("connected")
data = '{"k": "%s", "d": "%s", "t": "%s"}' % (DEVICE_KEY, message, TOPIC)
s.send(bytes(data, 'ascii'))
print("sent")
result = s.recv(8).decode()
print(result)
s.close()
break
except Exception as err1:
try:
s.close()
except:
pass
print(err1)
continue
except Exception as err:
print(err)
try:
s.close()
except:
pass
finally:
endLTE()