5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LTE-MモジュールSIM7080Gをpython&micropythonで使う

Last updated at Posted at 2022-04-18

はじめに

前回こちらの記事では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でも動作しました
スクリーンショット 2022-04-18 172039.png
スクリーンショット 2022-04-18 172111.png

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

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?