WebServer機能でIP値等をEEPROMに記録する。ブラウザ表示どうする?

最終更新日 2023年7月5日

Arduino純正開発ボードで採用されているATmega328 には1kBのEEPROM(不揮発性のメモリ)が搭載されています。
このメモリの使い方は自由なので、WebServerを構築したときIPアドレス等をEEPROMに登録することで、MPUがリセットされたときの起動時にEEPROMから情報を読み取れば、プログラムコードには特定のIPを記してあっても、デバイス自体は個々のIPアドレスで実行することが可能です。
EEPROMの内容はブラウザから確認出来、更新出来るようにしておく必要があります。先人がこの辺りの対策を公開されていますので、それに従ってコーディングすれば実現出来るかと思います。

別のMPU環境であってもEEPROMの実装は検討されています。ボード内にI2C接続のEEPROMChipを搭載するモノ(例えば24LC256)もありますが、開発環境側でフラッシュメモリマップを操作して、EEPROM相当(EEPROM Emulator)が実装されている物も有ります。

上記(Arduino-Pico)では実現出来ている事を確認済みです。

実現出来る事は判ったので、後は使い勝手を検討します。
ATmega328の場合はフラッシュのサイズが小さく、RAM容量も小さいためHTMLコードで余り凝ったことは検討しない方が良さそうです。すぐに限界を感じます。しかし、Arduino-PicoであればフラッシュサイズもRAM容量も十分と思われるので使い勝手を追求したいところです。

このような使い勝手/装飾は、Arduinoスケッチではなかなか紹介されないです。そこで検討して見ました。

上記のHTMLコードは以下の通りです。

<!DOCTYPE HTML PUBLIC "">
<html>
<HEAD>
	<META http-equiv="Content-Type" charset=Shift_JIS">
	<META http-equiv="Content-Style-Type">
	<TITLE>RPiPicoModbusTCP_Slave_1.1 Setup Page</TITLE>
	<SCRIPT>
		function HP(w1){parent.window.open(w1,'_top')}
	</SCRIPT>
	<style type="text/css">
		.tbox-style {
			padding-top   : 4px;
			padding-right : 4px;
			padding-bottom: 2px;
			text-align    : right;
		}
	</style>
</HEAD>
<BODY marginwidth="0" marginheight="0" leftmargin="0" style="margin: 0; padding: 0;">
<BLOCKQUOTE><BLOCKQUOTE>
<table bgcolor="#17A1A5" border="0" width="100%" cellpadding="1" style="font-family:Verdana;color:#ffffff;font-size:12px;">
<tr><td>RPiPicoModbusTCP_Slave_1.1 Setup Page</td></tr></table><br>
<script>
	function hex2num (s_hex) {
		eval("var n_num=0X" + s_hex);
		return n_num;
	}
</script>
<tbody>
<FORM><input type="hidden" name="SBM" value="1">
<table>
<tr><td>MAC:</td><td><input id="T1" type="text" size="3" maxlength="2" name="DT1" value="0" class="tbox-style">.<input id="T3" type="text" size="3" maxlength="2" name="DT2" value="8" class="tbox-style">.<input id="T5" type="text" size="3" maxlength="2" name="DT3" value="DC" class="tbox-style">.<input id="T7" type="text" size="3" maxlength="2" name="DT4" value="54" class="tbox-style">.<input id="T9" type="text" size="3" maxlength="2" name="DT5" value="4D" class="tbox-style">.<input id="T11" type="text" size="3" maxlength="2" name="DT6" value="E2" class="tbox-style"><input id="T2" type="hidden" name="DT1"><input id="T4" type="hidden" name="DT2
" class="tbox-style"><input id="T6" type="hidden" name="DT3"><input id="T8" type="hidden" name="DT4
" class="tbox-style"><input id="T10" type="hidden" name="DT5"><input id="T12" type="hidden" name="DT6
" class="tbox-style"></td></tr>
<tr><td>IP:</td><td><input type="text" size="3" maxlength="3" name="DT7" value="192" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT8" value="168" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT9" value="0" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT10" value="212" class="tbox-style"></td></tr>
<tr><td>MASK: </td><td><input type= "text" size="3" maxlength="3" name="DT11" value="255" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT12" value="255" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT13" value="255" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT14" value="0" class="tbox-style"></td></tr>
<tr><td>GW: </td><td><input type="text" size="3" maxlength="3" name="DT15" value="192" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT16" value="168" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT17" value="0" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT18" value="1" class="tbox-style"></td></tr><tr><td COLSPAN='2'>
<HR ALIGN=CENTER></td></tr>
<tr><td>NTPip: </td><td><input type="text" size="3" maxlength="3" name="DT19" value="192" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT20" value="168" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT21" value="0" class="tbox-style">.<input type="text" size="3" maxlength="3" name="DT22" value="199" class="tbox-style"></td></tr>
<tr><td>TimeZone:</td><td><input type="text" size="3" maxlength="5" name="DT23" value="9.00" class="tbox-style"></td></tr>
<tr><td><br></td></tr><tr><td COLSPAN='2'><P ALIGN=RIGHT><INPUT TYPE="button" VALUE="RETURN" onClick="HP('http://192.168.0.212/index')"/><input id="button1"type="submit" value="SUBMIT" Onclick="document.getElementById('T2').value = hex2num(document.getElementById('T1').value);
		document.getElementById('T4').value = hex2num(document.getElementById('T3').value);
		document.getElementById('T6').value = hex2num(document.getElementById('T5').value);
		document.getElementById('T8').value = hex2num(document.getElementById('T7').value);
		document.getElementById('T10').value = hex2num(document.getElementById('T9').value);
		document.getElementById('T12').value = hex2num(document.getElementById('T11').value);"></td></tr></tbody>
</table>
</BLOCKQUOTE></BLOCKQUOTE>
</form>
</BODY>
</html>

スケッチはいろいろ書き方があるので、全体像を示すと判りにくくなってしまいますので割愛します。
ちょっと思っているのは、,RAM容量に余裕があるのであればSTRINGS型で記述した方が判りやすいですね。



戯言(nonsense)に戻る


問い合わせ頁の表示


免責事項

本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。

本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。

商標・登録商標

Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。