forked from adafruit/Adafruit_CircuitPython_MiniMQTT
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request adafruit#32 from brentru/add-cellular
Add cellular usage examples
- Loading branch information
Showing
2 changed files
with
216 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
import time | ||
import board | ||
import busio | ||
import digitalio | ||
from adafruit_fona.adafruit_fona import FONA | ||
from adafruit_fona.adafruit_fona_gsm import GSM | ||
import adafruit_fona.adafruit_fona_socket as socket | ||
|
||
import adafruit_minimqtt as MQTT | ||
|
||
# Get Adafruit IO details and more from a secrets.py file | ||
try: | ||
from secrets import secrets | ||
except ImportError: | ||
print("GPRS secrets are kept in secrets.py, please add them there!") | ||
raise | ||
|
||
### Cellular ### | ||
|
||
# Create a serial connection for the FONA connection using 4800 baud. | ||
# These are the defaults you should use for the FONA Shield. | ||
# For other boards set RX = GPS module TX, and TX = GPS module RX pins. | ||
uart = busio.UART(board.TX, board.RX, baudrate=4800) | ||
rst = digitalio.DigitalInOut(board.D4) | ||
# Initialize FONA | ||
fona = FONA(uart, rst) | ||
|
||
### Feeds ### | ||
|
||
# Setup a feed named 'photocell' for publishing to a feed | ||
photocell_feed = secrets["aio_username"] + "/feeds/photocell" | ||
|
||
# Setup a feed named 'onoff' for subscribing to changes | ||
onoff_feed = secrets["aio_username"] + "/feeds/onoff" | ||
|
||
### Code ### | ||
|
||
# Define callback methods which are called when events occur | ||
# pylint: disable=unused-argument, redefined-outer-name | ||
def connected(client, userdata, flags, rc): | ||
# This function will be called when the client is connected | ||
# successfully to the broker. | ||
print("Connected to Adafruit IO! Listening for topic changes on %s" % onoff_feed) | ||
# Subscribe to all changes on the onoff_feed. | ||
client.subscribe(onoff_feed) | ||
|
||
|
||
def disconnected(client, userdata, rc): | ||
# This method is called when the client is disconnected | ||
print("Disconnected from Adafruit IO!") | ||
|
||
|
||
def message(client, topic, message): | ||
# This method is called when a topic the client is subscribed to | ||
# has a new message. | ||
print("New message on topic {0}: {1}".format(topic, message)) | ||
|
||
|
||
# Initialize GSM modem | ||
gsm = GSM(fona, (secrets["apn"], secrets["apn_username"], secrets["apn_password"])) | ||
|
||
while not gsm.is_attached: | ||
print("Attaching to network...") | ||
time.sleep(0.5) | ||
print("Attached to network!") | ||
|
||
while not gsm.is_connected: | ||
print("Connecting to network...") | ||
gsm.connect() | ||
time.sleep(5) | ||
print("Connected to network!") | ||
|
||
# Initialize MQTT interface with the cellular interface | ||
MQTT.set_socket(socket, fona) | ||
|
||
# Set up a MiniMQTT Client | ||
# NOTE: We'll need to connect insecurely for ethernet configurations. | ||
mqtt_client = MQTT.MQTT( | ||
broker="http://io.adafruit.com", | ||
username=secrets["aio_username"], | ||
password=secrets["aio_key"], | ||
) | ||
|
||
# Setup the callback methods above | ||
mqtt_client.on_connect = connected | ||
mqtt_client.on_disconnect = disconnected | ||
mqtt_client.on_message = message | ||
|
||
|
||
# Connect the client to the MQTT broker. | ||
print("Connecting to Adafruit IO...") | ||
mqtt_client.connect() | ||
|
||
photocell_val = 0 | ||
while True: | ||
# Poll the message queue | ||
mqtt_client.loop() | ||
|
||
# Send a new message | ||
print("Sending photocell value: %d..." % photocell_val) | ||
mqtt_client.publish(photocell_feed, photocell_val) | ||
print("Sent!") | ||
photocell_val += 1 | ||
time.sleep(5) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
import time | ||
import board | ||
import busio | ||
import digitalio | ||
from adafruit_fona.adafruit_fona import FONA | ||
from adafruit_fona.adafruit_fona_gsm import GSM | ||
import adafruit_fona.adafruit_fona_socket as socket | ||
|
||
import adafruit_minimqtt as MQTT | ||
|
||
### Cellular ### | ||
|
||
# Get cellular details and more from a secrets.py file | ||
try: | ||
from secrets import secrets | ||
except ImportError: | ||
print("Cellular secrets are kept in secrets.py, please add them there!") | ||
raise | ||
|
||
# Create a serial connection for the FONA connection using 4800 baud. | ||
# These are the defaults you should use for the FONA Shield. | ||
# For other boards set RX = GPS module TX, and TX = GPS module RX pins. | ||
uart = busio.UART(board.TX, board.RX, baudrate=4800) | ||
rst = digitalio.DigitalInOut(board.D4) | ||
# Initialize FONA | ||
fona = FONA(uart, rst) | ||
|
||
### Topic Setup ### | ||
|
||
# MQTT Topic | ||
# Use this topic if you'd like to connect to a standard MQTT broker | ||
mqtt_topic = "test/topic" | ||
|
||
# Adafruit IO-style Topic | ||
# Use this topic if you'd like to connect to io.adafruit.com | ||
# mqtt_topic = 'aio_user/feeds/temperature' | ||
|
||
### Code ### | ||
|
||
# Define callback methods which are called when events occur | ||
# pylint: disable=unused-argument, redefined-outer-name | ||
def connect(client, userdata, flags, rc): | ||
# This function will be called when the client is connected | ||
# successfully to the broker. | ||
print("Connected to MQTT Broker!") | ||
print("Flags: {0}\n RC: {1}".format(flags, rc)) | ||
|
||
|
||
def disconnect(client, userdata, rc): | ||
# This method is called when the client disconnects | ||
# from the broker. | ||
print("Disconnected from MQTT Broker!") | ||
|
||
|
||
def subscribe(client, userdata, topic, granted_qos): | ||
# This method is called when the client subscribes to a new feed. | ||
print("Subscribed to {0} with QOS level {1}".format(topic, granted_qos)) | ||
|
||
|
||
def unsubscribe(client, userdata, topic, pid): | ||
# This method is called when the client unsubscribes from a feed. | ||
print("Unsubscribed from {0} with PID {1}".format(topic, pid)) | ||
|
||
|
||
def publish(client, userdata, topic, pid): | ||
# This method is called when the client publishes data to a feed. | ||
print("Published to {0} with PID {1}".format(topic, pid)) | ||
|
||
|
||
# Initialize GSM modem | ||
gsm = GSM(fona, (secrets["apn"], secrets["apn_username"], secrets["apn_password"])) | ||
|
||
while not gsm.is_attached: | ||
print("Attaching to network...") | ||
time.sleep(0.5) | ||
print("Attached to network!") | ||
|
||
while not gsm.is_connected: | ||
print("Connecting to network...") | ||
gsm.connect() | ||
time.sleep(5) | ||
print("Connected to network!") | ||
|
||
# Initialize MQTT interface with the cellular interface | ||
MQTT.set_socket(socket, fona) | ||
|
||
# Set up a MiniMQTT Client | ||
client = MQTT.MQTT( | ||
broker=secrets["broker"], username=secrets["user"], password=secrets["pass"] | ||
) | ||
|
||
# Connect callback handlers to client | ||
client.on_connect = connect | ||
client.on_disconnect = disconnect | ||
client.on_subscribe = subscribe | ||
client.on_unsubscribe = unsubscribe | ||
client.on_publish = publish | ||
|
||
print("Attempting to connect to %s" % client.broker) | ||
client.connect() | ||
|
||
print("Subscribing to %s" % mqtt_topic) | ||
client.subscribe(mqtt_topic) | ||
|
||
print("Publishing to %s" % mqtt_topic) | ||
client.publish(mqtt_topic, "Hello Broker!") | ||
|
||
print("Unsubscribing from %s" % mqtt_topic) | ||
client.unsubscribe(mqtt_topic) | ||
|
||
print("Disconnecting from %s" % client.broker) | ||
client.disconnect() |