以前は Telit の GM862-QUAD-PY モジュールを使用していました (リンクはこちら: http://www.telit.com/en/products.php?p_ac=show&p=4 )。このモジュールには Python インタープリターが組み込まれています。長い間、単一モジュールの GSM/GPRS ソリューションとして使用しています。私は基本的に、AT コマンドをモジュール自体の GSM 部分に送受信する Python スクリプトを作成します。Python を使用して、GPIO ピン、UART、ビットバンギング SPI、および I2C バスにもアクセスできます。
ただし、この Python インタープリターには大きな制限があります。小さなプロジェクトにのみ適しています。スレッドや、あらゆる種類の割り込みやシグナルはサポートされていません。したがって、書かれた Python プログラムは、大きなスーパー ループを備えている必要があります。私のアプリケーションでは、GM862 モジュールが UART から受信データを読み取り、それを処理して GPRS サーバーにアップロードします。一方、SMS または GPRS サーバーから送信されたコマンドも読み取ります。システムを使用するユーザーが増えると (つまり、UART のデータが増え、システムへの SMS コマンドが増えることを意味します)、スーパー ループはどんどん遅くなります。Python プログラムを最適化してもあまり効果がなく、コードが難読化されます。
最後に、組み込み Linux プラットフォームに切り替えることにしました。Telit には GSM/GPRS モジュールの組み込み Linux バージョンである GE863-PRO がありますが、その開発キットは入手が困難です。今、私はビーグルボーンを見ています。GM862-QUAD-PY を通常の AT コマンドの方法で使用します。ただし、AT コマンドは処理が遅いです。コマンドによっては、完了までに 15 秒ほどかかる場合があります。元の Python コードでは、AT 応答があるまで待つだけです。その後、AT コマンドを使用しない別のことを行います。
私は現在 Linux を使用しており、Pthreads を使用しているため、GSM モジュールを最大限に活用してスループットを向上させたいと考えています。これが私の最初のアイデアです。AT コマンド保留キューを作成します。キューの各要素は、AT コマンド自体とコールバック関数で構成されます。そのキューから AT コマンドを受け取り、UART 経由で送信するスレッドを作成し、スレッドが応答をポーリングします。応答があると、スレッドはコールバック関数を呼び出します。
私は組み込み Linux と Pthreads に慣れていないので、これが GSM/GPRS モジュールの高い使用率を達成するための最良の方法であるかどうか、また利用できる優れた既存のライブラリがあるかどうかを知りたいです。
前もって感謝します。