ソフトウェア
プロジェクトハードウェア
Arduino IDEの「Additional Boards Managers URLs」フィールドに次のリンクを使用して、STM32のサポートを追加します。
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
Arduinoのライブラリマネージャからこれらのライブラリを追加します。
これらのライブラリ依存関係のインストールを承認します。
- STM32duino LwIP
- STM32duino LSM6DSO
- STM32duino LIS2DW12
- STM32duino LIS2MDL
- STM32duino HTS221
- STM32duino LPS22HH
- STM32duino STTS751
- STM32duino LSM6DSOX
Lab1
STM32H746をUSBコネクタ(CN1)経由でPCに接続し、簡単なLED点滅デモを使用してボードをプログラムできることを確認しましょう。このコードはLD1を点滅させます。
void setup() {
// initialize digital pin LED_BUILTIN as an output
pinMode(LED_BUILTIN, OUTPUT);
};
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
Full Source:
ベリファイしてアップロードします。
LD1が点滅します。
Lab2
STM32H746にはオンボードEthernetが搭載されており、STM32Ethernetライブラリを通じて有効にすることができます。Ethernet.begin()を使用してこのライブラリを初期化し、次にEthernet.localIP()を使用して新しいIP アドレスをデバッグ端末に出力します。この例では、ローカルDHCPサーバからIPアドレスを取得する必要があります。
LwIP.hおよびSTM32Ethernet.hヘッダファイルを追加します。
#include <LwIP.h>
#include <STM32Ethernet.h>
デバッグ用のシリアルポートを有効にします。
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Ethernetライブラリを初期化します。
// give the ethernet module time to boot up:
delay(1000);
// start the Ethernet connection:
Ethernet.begin();
// print the Ethernet board/shield's IP address:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
Full Source
ベリファイしてアップロードすると、Arduinoシリアル モニタがIPアドレスを報告します
My IP address: 192.168.3.229
Lab3
次に、Ethernet.linkStatus()を使って、アクティブなリンクがあることを確認します。LEDが点灯するのは、アクティブな接続があるときだけです。Ethernetケーブルを取り外してテストします。
void loop() {
if (Ethernet.linkStatus() == LinkON) {
Serial.println("Link status: On");
digitalWrite(LED_BUILTIN, HIGH);
}
else if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Link status: Off");
digitalWrite(LED_BUILTIN, LOW);
}
delay(500);
}
Full Source
ベリファイしてアップロードすると、ArduinoのシリアルモニタにLD1と一致するリンクステータスが表示されるので、Ethernetケーブルを抜いて確認します。
My IP address: 192.168.3.229
Link status: On
Link status: On
Link status: Off
Link status: Off
Link status: On
Lab4
STTS751センサを追加します。
#include <STTS751Sensor.h>
STTS751Sensor *STTS751_Temp;
// Initialize I2C bus.
Wire.begin();
// Initialize STTS751 Sensor
STTS751_Temp = new STTS751Sensor (&Wire);
STTS751_Temp->Enable();
void loop() {
//Read STTS751 Temperature
float STTS751_tempC = 0;
STTS751_Temp->GetTemperature(&STTS751_tempC);
float STTS751_tempF = (STTS751_tempC * 1.8) + 32.0F;
Serial.print(" | Temp[F]: ");
Serial.print(STTS751_tempF, 2);
Serial.println(" |");
Full Source
ベリファイしてアップロードすると、Arduinoのシリアル モニタにSTTS751からの温度データが表示されるようになります。
My IP address: 192.168.3.229
| Temp[F]: 74.30 |
Link status: On
| Temp[F]: 74.30 |
Link status: On
Lab5
HTS221センサを追加します。
#include <HTS221Sensor.h>
HTS221Sensor *HTS221_HumTemp;
// Initialize HTS221 Sensor
HTS221_HumTemp = new HTS221Sensor (&Wire);
HTS221_HumTemp->Enable();
// Read HTS221 Humidity and Temperature
float HTS221_humidity = 0, HTS221_tempC = 0;
HTS221_HumTemp->GetHumidity(&HTS221_humidity);
HTS221_HumTemp->GetTemperature(&HTS221_tempC);
float HTS221_tempF = (HTS221_tempC * 1.8) + 32.0F;
Serial.print(" | Temp[F]: ");
Serial.print(STTS751_tempF, 2);
Serial.print(" | Temp[F]: ");
Serial.print(HTS221_tempF, 2);
Serial.print("| Hum[%]: ");
Serial.print(HTS221_humidity, 2);
Serial.println(" |");
Full Source
ベリファイしてアップロードすると、ArduinoのシリアルモニタにHTS221からの温度と湿度のデータが含まれるようになります。
My IP address: 192.168.3.229
| Temp[F]: 74.07 | Temp[F]: 72.32| Hum[%]: 41.20 |
Link status: On
| Temp[F]: 74.19 | Temp[F]: 72.32| Hum[%]: 41.20 |
Link status: On
Lab6
LPS22HHセンサを追加します。
#include <LPS22HHSensor.h>
LPS22HHSensor *LPS22HH_PressTemp;
// Initialize LPS22HH Sensor
LPS22HH_PressTemp= new LPS22HHSensor(&Wire);
LPS22HH_PressTemp->Enable();
// Read LPS22HH Pressure and Temperature.
float LPS22HH_pressure = 0, LPS22HH_tempC = 0;
LPS22HH_PressTemp->GetPressure(&LPS22HH_pressure);
LPS22HH_PressTemp->GetTemperature(&LPS22HH_tempC);
float LPS22HH_tempF = (LPS22HH_tempC * 1.8) + 32.0F;
Serial.print(" | Temp[F]: ");
Serial.print(STTS751_tempF, 2);
Serial.print(" | Temp[F]: ");
Serial.print(HTS221_tempF, 2);
Serial.print(" | Temp[F]: ");
Serial.print(LPS22HH_tempF , 2);
Serial.print("| Hum[%]: ");
Serial.print(HTS221_humidity, 2);
Serial.print(" | Pres[hPa]: ");
Serial.print(LPS22HH_pressure, 2);
Serial.println(" |");
Full Source
ベリファイしてアップロードすると、ArduinoシリアルモニタにLPS22HHからの温度と圧力のデータが含まれるようになります。
My IP address: 192.168.3.229
| Temp[F]: 73.96 | Temp[F]: 72.14 | Temp[F]: 74.35| Hum[%]: 41.30 | Pres[hPa]: 979.12 |
Link status: On
| Temp[F]: 73.96 | Temp[F]: 72.14 | Temp[F]: 74.35| Hum[%]: 41.30 | Pres[hPa]: 978.99 |
Link status: On
Lab7
Jsonデータオブジェクトを生成します。
#include <ArduinoJson.h>
// Create a unique ID for the data from each STM32 running this code
const char* jediID = "STM32F7_IKSO1A3";
void loop() {
String postData;
StaticJsonDocument <200> doc;
JsonObject context = doc.createNestedObject("context");
context["target_id"] = String(jediID);
JsonObject data = doc.createNestedObject("data");
data["HTS221_humidity"] = HTS221_humidity;
data["HTS221_tempF"] = HTS221_tempF;
data["LPS22HH_pressure"] = LPS22HH_pressure;
data["LPS22HH_tempF"] = LPS22HH_tempF;
data["STTS751_tempF"] = STTS751_tempF;
serializeJson(doc, postData);
//This prints the JSON to the serial monitor screen
Serial.println(postData);
Full Source
ベリファイしてアップロードすると、ArduinoのシリアルモニタにJsonデータオブジェクトが表示されるようになります。
{"context":{"target_id":"STM32F7_IKSO1A3"},"data":{"HTS221_humidity":41,"HTS221_tempF":72.14,"LPS22HH_pressure":978.8882,"LPS22HH_tempF":74.39,"STTS751_tempF":73.9625}}
Lab8
Jsonデータオブジェクトを送信します。
#include <ArduinoHttpClient.h>
char serverAddress[] = "192.168.3.104"; // server address
int port = 8100;
// initialize the library instance:
EthernetClient eth;
HttpClient client = HttpClient(eth, serverAddress, port);
if (Ethernet.linkStatus() == LinkON) {
Serial.println("Link status: On");
digitalWrite(LED_BUILTIN, HIGH);
String contentType = "application/json";
client.post("/v1/data/mc", contentType, postData);
// read the status code and body of the response
int statusCode = client.responseStatusCode();
String response = client.responseBody();
Serial.print("Status code: ");
Serial.println(statusCode);
Serial.print("Response: ");
Serial.println(response);
}
else if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Link status: Off");
digitalWrite(LED_BUILTIN, LOW);
}
delay(500);
}
Full Source
ベリファイしてアップロードすると、Arduinoのシリアルモニタがサーバ応答コードを報告します。
Status code: 200
Response: "Data sent successfully"