私はジャワに来ています、ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ラ・ララララララララララララララララララララララ
STM32 + ESP8266アップロードデータの問題は何ですか?誰もがSTM32 + ESP8266に精通していると思いますが、STM32 + ESP8266はどのようにデータをアップロードしますか?それを理解してもらいましょう。
STM32 + ESP8266はデータをアップロードします。実際、HTTPプロトコルを使用してサーバーにアクセスするためのGETまたはPOSTリクエストを送信します。STM32+ ESP8266がデータをアップロードする方法に驚かれるかもしれません。しかし、これは事実であり、編集者も非常に驚いています。
STM32 + ESP8266のアップロードデータについてですが、どう思いますか?コメント欄で一緒に議論してください!✿✿ヽ(°▽°)ノ✿が終わりました!
ああ、あなたはまだそこにいます、それは終わりました、何も残されていません
ほんとに!うなずいてほんとに!!間違いなく!
編集者の家に急いで行ったとき、この記事だけが残っていました
序文
私はJavaWebプログラマーです私はJavaWebプログラマーです私はJavaWebプログラマーです
STM32を書くことは単なる趣味であり、主なビジネスはバックグラウンドプログラムを開発することです
この記事では主に、GETとPOSTを使用してデータを送信し、Springbootをサーバーとして使用してデータを受信および表示することの違いと長所と短所について説明します。
情報を見つけるために浪費される時間を減らすために、同様のアイデアを持つ開発者や愛好家を支援したいと思っています。
ESP8266ドライバーと送信プログラムを制御するためのSTM32の記述方法の詳細については、以前に書いた記事を参照してください。
[STM32] Stm32f103c8t6 + ESP8266-01s + DHT11は、サーバーへの温度と湿度のデータのアップロードを実現します
目次
アチーブメント表示
5分間隔で収集された温度データ
1分間隔で収集された温度データ
5分間隔で収集された湿度データ
1分間隔で収集された湿度データ
上記のページはすべて、Echartsを使用してフロントエンドに表示されます
Springbootについて
この記事では、スペースが比較的少ないSpringbootについて説明しますが、サーバーは非常に重要です。モノのインターネットとは、小さなデバイスがインターネットを介してデータをアップロードおよびダウンロードすることです。実際の意思決定は、送信するサーバーです。指示。
連絡した人の中には、ネットワークデバッグアシスタントなどのシミュレートされたサーバーにデータを送信する人もいます。受信したデータは表示されますが、実際には保存されておらず、使用できません。
これが私がクライアントを構築した理由であり、私はJavaWeb開発者であり、ソフトウェアとハードウェアの組み合わせであるバックエンドに非常に精通しています。
ESP8266はSpringbootサーバーに接続して、TCP経由でデータをアップロードします
サーバーはSpringbootプロジェクトを使用して開発され、フロントエンドはEchartsを使用してデータ曲線を表示し、データベースはmysqlを使用します
データは30秒ごとにアップロードされ、サーバーは1日1440ポイントのデータ、5分288ポイント、15分96ポイント、30分48ポイントのデータを保存します。 4つの粒度
データベースの設計には多くの考慮が払われました。まず、テーブル内のフィールド数が100を超えるとクエリの効率に影響し、私は水平テーブルであるため、テーブル内のフィールド数が最も少なくなります。データストレージの粒度は1分です。値は1日を通して1440の値であり、5分で288の値があります。最終的な結論は、パフォーマンスを向上させるためにドメインの使用を減らすことです。データが長すぎる場合、データベースのパフォーマンスとすべてのパーティクルの両方を満たすことができるデータストレージの数を増やします。たとえば、1440個のデータが複数のデータに分割されてデータベースに保存されます。もちろん、実際の状況は1分です。ストレージ。保存方法の特定のロジックは少し複雑です。ロジックは非常に強力で、共有するのは簡単ではありません。独自のプログラム設計に従うことができます。
特定の背景デザインは、あなた自身のニーズに応じてデータを監視および警告することができます。つまり、自由に遊ぶことができます。
データ送信方法
ESP8266は、HTTPプロトコルを使用して、サーバーにアクセスしてデータをアップロードするためのリクエストを送信します
ここではHTTPプロトコルについては説明しません。概念的な知識についてはあまり詳しくないので、インターネットでそのような知識を見つけるのは簡単です。
ここでは主に、ESP3266がGETおよびPOSTリクエストを送信する方法について説明します
GETアクセス方法
GETする方法はたくさんあります。たとえば、URL内のパラメーターのスプライシングは次のとおりです。IP:ポート/ルート/パラメーター1 /パラメーター2
もちろん、次のような別のタイプを使用することもできます。IP:ポート/ルート?パラメーター名1 =パラメーター1およびパラメーター名2 =パラメーター2
使用する方法に応じてHTTPアクセス方法が接続されている限り、サーバープログラムにアクセスできます。
Springboot のコントローラーにGETアクセスメソッドを記述します
httpアクセスに慣れるためにpostmanを使用することをお勧めします
GETメソッドを選択し、utlの後に「/」でパラメーターを区切ります
アクセスできることを示すためにステータスコード200を送信します
ステータスコード:200サーバーが応答を受信しました。400パラメータが正しくなく、404にアクセスできませんでした。
背景印刷
データはバックグラウンドで受信され、アクセス方法に問題がないことを示しています
では、マイクロコントローラーをどのように使用してこのアドレスにアクセスしますか?
これは郵便配達ツールを使用します
[コード]をクリックしてhttpアクセスコードを表示します。これは、アドレスにアクセスするためのブラウザの背後にあるすべてのパラメータです。
訪問するアドレスを入力するだけで、残りのパラメータはブラウザによって追加されます。ここでは、アクセスアドレスの背後に必要なパラメータを確認できます。
クッキーに加えて、使用したいすべてのものとホストアドレス
GET /STM32/stm32esp8266/weather/123/456 HTTP/1.1
Accept-Language: zh-CN,zh;q=0.9
Host:192.168.3.8
テンプレートへの変換は次のとおりです。
GET {项目路由地址} HTTP/1.1\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Host:{服务器ip}\r\n
\r\n换行
改行は説明に便利です。ESP8266では、文字列全体の改行の転送文字「\ r \ n」であり、末尾に改行を追加する必要があります。
黒板をノックして要点を描く
GETはSTM32に実装されています
HTTPリクエストがどのように記述されているかを知ったら、STM32でパラメーターをアセンブルし、ESP8266で送信する必要があります。
STM32から8266に送信される文字列は次のとおりです。8266はTCPを使用してサーバーに接続し、この文字列を送信してGETアクセスを実現します。
"GET /STM32/stm32esp8266/weather/123/456 HTTP/1.1\r\nAccept-Language: zh-CN,zh;q=0.9\r\nHost:192.168.3.8\r\n\r\n"
GETメソッドは終了しました
次は、この段階で私がお勧めするデータのアップロード方法です
POST + JSONアクセス方法
GETメソッドはURL内のパラメーターの無制限のスプライシングを必要とするため
その結果、新しいセンサーデータを追加した後、マイクロコントローラーだけでなく、新しいコードを再書き込みする必要があります。
サーバー上でデータを受信するSpringbootプロジェクトでさえ、受信メソッドに新しいパラメーターを追加する必要があります。これは、維持するのに時間と労力がかかります。
たとえば、これが当てはまります。パラメータを追加するたびに、サーバーコードを変更する必要があります。保守とトラブルシューティングは簡単ではありません。
POST + JSONは、データがJSONキーと値のペアに従ってアセンブルされ、サーバー全体に送信されるメソッドです。サーバーは、JSONキー値に従ってトラバースし、パラメーターの対応するメソッドを実行します。
このように、センサーを追加して送信パラメーターを増やしても、JSONで追加するだけで、サーバーコードを変更する必要はありません。
Springboot のコントローラーにPOSTアクセスメソッドを書き込む
サーバーはJSON形式のキーと値のペアのパラメーターを受け取り、forループを使用してパラメーターをトラバースし、ビジネスロジックを処理するためのメソッドに渡します。
サーバーの受信方法を知っていますが、マイクロコントローラーはどのようにJSONを送信しますか?(この質問は明らかに私はとても愚かです、どうすれば自分自身に質問して答えることができますか?)
また、最初に郵便配達ツールで送信するPOST + JSONをシミュレートします
postmanを使用してJSONを送信する
JSON文字列を自由に加算および減算するパラメータは次のとおりです。GETメソッドのように1対1で考慮する必要はありません。
データはJSONに均一に書き込まれるため、GETメソッドのようにMCUとサーバーのパラメーターを1対1で受け取る必要はありません。
また、postmanのCideツールを使用してHTTPアクセスコードを表示します
少し変更します
POST /STM32/stm32esp8266/weathermirror? HTTP/1.1
Host: 192.168.8.108:8085
Content-Type: application/json;charset=utf-8
Content-Type: text/plain
Content-Length:38
cache-control: no-cache
{"temperature":"123","humidity":"456"}
POST + JSONモードテンプレート
POST {项目路由地址}? HTTP/1.1\r\n
Host: {服务器ip}:{项目部署端口}\r\n
Content-Type: application/json;charset=utf-8\r\n
Content-Type: text/plain\r\n
Content-Length:{下面JSON长度包括大括号}\r\n
cache-control: no-cache\r\n
{JSON}
黒板をノックして要点を描く
POST + JSONはSTM32に実装されています
getメソッドと同じように、8266が送信する文字列としても記述されます。
POST {项目路由地址}? HTTP/1.1\r\nHost: {服务器ip}:{项目部署端口}\r\nContent-Type: application/json;charset=utf-8\r\nContent-Type: text/plain\r\nContent-Length:{下面JSON长度包括大括号}\r\ncache-control: no-cache\r\n{JSON}
注意すべき点がいくつかあります
1. JSON文字列のKEY値とVALUE値は二重引用符で囲む必要があります。そうしないと、送信が失敗し、バックグラウンドでエラーが報告されます。
如:{\ "10001 \":\ "%d \"、\ "10002 \":\ "%d \"、\ "10003 \":\ "%d \"}
2. JSONを使用する場合は、content-Length:XXパラメーターを追加する必要があります。これは、送信されるJSON文字列の長さを意味し、この長さにはJSONの中括弧が含まれます。
これまでに、STM32 + ESP8266を使用してHTTPプロトコルを使用してデータを送信する方法は終了しました。
本当に花で終わる✿✿ヽ(°▽°)ノ✿
最後に、私の開発時間を共有します
STM32のコードを見せてください
プロジェクトが8266から送信されたPOSTリクエストを正常に受信したのはこれが初めてです