はじめに
前回こちらの記事ではM5Stack CAT-M UNIT(SIM7080G搭載) を
M5sticckCのarduino開発環境で使ってみました
M5Stack CAT-M UNIT をSORACOMで使う
今回はラズパイのpythonとラズパイPicoのmicropython を使ってHTTP POST/GET をやってみました。
送信先にはAbmientを、simはpovoを使うことによりWifiのない屋外でもランニングコストは無料でIoT を試せます。
arduino 開発環境(マイコンはESP8266/ESP32)ではTinyGsm と Ambient_ESP8266_lib が用意されていてそれらを利用することによりSIM7080GモデムでTCP、HTTP、HTTPSの通信が可能です。
一方 python/micropython では ambient-python-lib はあるもののrequests/urequests はWifiを利用して接続するのでSIM7080Gモデムで通信するようにするやり方がわかりませんでした。
(そもそもラズパイPicoのmicropythonにはurequestsが入っていない)
仕方ないのでATコマンドを直接送ることで通信します。
※なおラズパイPicoにはArduino開発環境もあるのでそれを使うこともできます
参考記事
UART でATコマンド送信
コピペ参考にしたのはこちらのサンプルコード
https://www.waveshare.com/wiki/Pico-SIM7080G-Cat-M/NB-IoT#HTTP
micropythonでは
import machine
port = 0 #GPIO0=TX GPIO1=RX
baudrate = 115200
modem = machine.UART(port, baudrate)
modem.write(('AT' + '\r\n').encode())
while (utime.ticks_ms() - prvmills) < timeout:
if modem.any():
rec_buff = b"".join([rec_buff, modem.read(1)])
pythonでは
ラズパイでSerialを有効にし
pip3 install pyserial
でpyserialをインストールしたうえで
import serial
port= '/dev/ttyAMA0' #GPIO14=TX GPIO15=RX
baudrate = 115200
modem = serial.Serial(port, baudrate)
modem.write(('AT' + '\r\n').encode())
if modem.inWaiting():
time.sleep(0.1 )
rec_buff = modem.read(modem.inWaiting())
こんな感じで送受信してます
ちなみにM5Stack CAT-M UNITのGROVE端子には
Pi Pico v1.0用Grove シールド
GROVE - ベースHAT for Raspberry Pi
を使うと簡単に接続できます。なお電源電圧は5Vでも3.3Vでも動作しました
ambientの接続先は
http_get_server = ['http://ambidata.io', 'api/v2/channels/' +str(channelID) +'/data?readKey=' +str(readKey)]
http_post_server = ['http://ambidata.io', 'api/v2/channels/' + str(channelID) + '/data']
GET ではurlに例えば &n=10 をつなげると最新から10回分のjsonを返してくれて
POST ではheaderに "Content-Type","application/json" を指定しbodyに {"writeKey":"xxxxxxxx","d1":"123.456"} といった形式で送ります
Command | 説明 |
---|---|
AT+CPIN | Check SIM card status |
AT+CSQ | Check RF signal |
AT+CGAPN | Query network after the successful registration of APN |
AT+CNACT | Activating network bearing |
AT+CGREG | Check PS service |
AT+SHCONF | Set HTTP Parameter |
AT+SHBOD | Set Body |
AT+SHAHEAD | Add Head |
AT+SHCONN | HTTP Connection |
AT+SHREQ | Set request |
AT+SHSTATE | Get HTTP status |
AT+SHREAD | Read data |
AT+SHDISC | Disconnect HTTP connect |
こういったATコマンドを利用しています。詳しくはマニュアルを見てください
https://www.waveshare.com/wiki/File:SIM7080_Series_AT_Command_Manual_V1.02.pdf
https://www.waveshare.com/wiki/File:SIM7080_Series_HTTP(S)_Application_Note_V1.01.pdf
以上なんとか動いたのでサンプルコードをGithubに置いておきます
https://github.com/mnltake/SIM7080_povo_ambient