今回は、マニアックを極めた内容です。
ARM-Firstのボード用に、ちょっと凝ったWebサーバーのサンプルコードを作ってみました。
ボード上に載っている気圧・温度のセンサーチップ※からデータを読み出して、ブラウザーから閲覧できる様なコードです。
せっかくなので気圧の単位について
圧力の大きさとしては、かつてのミリバール (英: millibar、mbar) すなわち1/1000バールと等しい。
標準大気圧は、
- 1 気圧(標準大気圧)(atm)
- = 1.01325 bar
- = 1013.25 mbar
- = 1013.25 hPa
- = 101325 Pa
と定義されています。
ミリ:m1/1000
ヘクト:h100
Pa:パスカル
キロ キロ と ヘクト 出(da)掛けた メートルが デシ に追われて センチ ミリ ミリ
なんか懐かしいですね。突然思い出しました。
メートル法などの単位を、覚える「暗唱ことば」です。
暗唱の言葉に出てくるのは、「k、h、da、m、d、c、m」ですね。
da(10)とかd(1/10)ってほぼ、使いませんね。
※ STマイクロエレクトロニクス LPS22HB
Rakuten MiniからWi-Fi経由でブラウズしている様子
/************************************************************************
*
* FILE :Web_Server_Test091.c
* DATE :2021/2/18
* DESCRIPTION :ARM-First DEMO PROGRAM Press. & Temp.
* CPU TYPE :STM32F405 & ESP8266 w/AT command
* AUTHOR :jk1brk
* NOTE :Under construction
*
************************************************************************/
#include <time.h>
#include <Wire.h> // I2C lib. header file
#include <LiquidCrystal.h>
const int rs = PA4, en = PB11, d4 = PC13, d5 = PB8, d6 = PB12, d7 = PC7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
String lcddata[2] = {"",""};
void temp_calc(char *p, char *t) ; //
void web_server(char *strp, char *strt); //
void get2str(char *buf);
void lcdprint(String data);
String atout(String data);
void initWiFi();
uint8_t i2c_mem_write(uint8_t reg, uint8_t addr, uint8_t data);
uint8_t i2c_mem_read(uint8_t count, uint8_t addr, uint8_t reg, uint8_t * buf);
String title = "Web Server Test";
void setup() {
// put your setup code here, to run once:
delay(1000);
Serial.begin(115200);
Wire.begin(); // Start the I2C driver for codec register setup
lcd.begin(16, 2);
delay(100);
initWiFi();
// set up web server
atout("AT+CIPMUX=1");
atout("AT+CIPSERVER=1,80");
// opening message on LCD
lcdprint("PRESS & TEMP");
}
void loop() {
// put your main code here, to run repeatedly:
char strp[16]; // Pressure data save area
char strt[16]; // Temperature data save area
Serial.println("*****");
temp_calc(strp, strt);
web_server(strp, strt);
}
ここで使用した各関数は、追々紹介します。
TBC
【参考記事】