先日製作した、WiFi電界強度計、表示のLCDを安価な、Aitendo の TS-206 に変更してみた。7セグメントの表示しかできないが、値段が100円なのでMLA48のメンバーに頒布するにあたって、コストが下げられる。表示も大きく、バックライトもついているので見やすい。なぜだか正面からみるよりも多少斜めから見るほうが見やすい。他の設定があるのだろうか。
ネットを検索すると先人が提供してくれたライブラリがいくつかあるので、今回は、ここのライブラリを使用した。
WiFi での WEBアクセスによる表示は、スマホではデータの自動更新が問題なく表示されるのだが、PCのブラウザ Firefox では、こんなふうにブロックされてしまう。ブラウザ側で対処するのが良いか、HTMLの記述を工夫するのが良いのかわからないが、参考までに、Arduino IDEでのスケッチ(プログラム)を載せておく。
--------------------------------
/*
Wifi Field Strength Meter
LCD Aitendo TS-206
*/
// include the library code:
#include <ESP8266WiFi.h>
#include <Ts206.h>
// initialize the library with the numbers of the interface pins
Ts206 lcd(13, 12, 14); // (GPIO13:data, GPIO12:wr, GPIO14:cs)
// WiFi Definitions //
const char WiFiAPPSK = "2016MLA48";
WiFiServer server(80);
// Variable Definitions
const int ANALOG_PIN = A0; // The only analog pin on the Thing
float FieldRaw,FieldStrength ;
int FieldLen,DecPosition ;
String StrengthString,WorkString ;
void setup() {
// Initialize TS-206 LCD
lcd.begin();
// Initialize Wifi
setupWiFi();
server.begin();
}
void loop() {
// Read Data from Analog Input
DataRead();
// Write Data to TS-206 LCD
delay(800);
WriteLCD(); // Write Data to LCD
// Write HTML Data to WiFi Chip
WriteHTML();
delay(100);
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}
void setupWiFi()
{
WiFi.mode(WIFI_AP);
//++++++++++++++++++++++++++++++++
const char AP_Name = "MLA48";
WiFi.softAP(AP_Name, WiFiAPPSK);
IPAddress ip(192,168,20,48);
IPAddress gateway(192,168,20,48);
IPAddress subnet(255,255,255,0);
WiFi.softAPConfig(ip,gateway,subnet);
}
void DataRead()
{
// Read Field Strength Value from Analog PIN
FieldRaw = analogRead(ANALOG_PIN) ;
FieldRaw = FieldRaw * 1.98 ;
FieldRaw = 2.0 - FieldRaw / 1024 ;
FieldStrength = -FieldRaw / 0.025;
StrengthString = String(FieldStrength);
FieldLen = StrengthString.length();
DecPosition = StrengthString.indexOf(".");
}
void WriteLCD()
{
int i;
lcd.disp(1, ' '); // Digit 1 " "
lcd.disp(2, ' '); // Digit 2 " "
// Digit 3 " " or "-" Sign
if (FieldLen == 6) { lcd.disp(3, '-');}
else {
lcd.disp(3, ' '); }
// Digit 4 " " or "-" or Number
switch (FieldLen) {
case 4:
lcd.disp(4, ' ');
break;
case 5:
WorkString = StrengthString.substring(DecPosition-2,DecPosition-1);
if (WorkString == "-") { lcd.disp(4,'-');}
else {
i=WorkString.toInt();
i=i + 0x30;
lcd.disp(4, i);
}
break;
default:
WorkString = StrengthString.substring(DecPosition-2,DecPosition-1);
i=WorkString.toInt();
i=i + 0x30;
lcd.disp(4, i);
}
// Digit 5 Allways number
WorkString = StrengthString.substring(DecPosition-1,DecPosition);
i=WorkString.toInt();
i=i + 0x30;
lcd.disp(5, i);
// Digit 6 Allways With Decimal point
WorkString = StrengthString.substring(DecPosition+1,DecPosition+2);
i=WorkString.toInt();
i=i + 0x30;
lcd.disp(6,i);
lcd.disp(7, ' '); // Digit 7 " "
lcd.disp(8, 'd'); // Digit 8 "d"
lcd.disp(9, 'b'); // Digit 9 "b"
}
void WriteHTML()
{
// Write HTML CODE
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Prepare the response. Start with the common header:
String s = "HTTP/1.1 200 OK\r\n";
s += "Content-Type: text/html\r\n\r\n";
s += "<!DOCTYPE HTML>\r\n<html>\r\n";
s += "<head>\r\n";
s += "<meta http-equiv='Refresh' content='5'>\r\n";
client.print(s);
s = "";
s += "<BODY>";
s += "<P align='center'><FONT size='+4'>Field strength<BR></FONT></P>";
s += "<CENTER>";
s += "<TABLE border='1' bgcolor='#00ffff'>";
s += "<TBODY>";
s += "<TR>";
s += "<TD width='255' align='right'>";
s += "<B><FONT size='+4'>";
s += String(FieldStrength);
// s += StrengthString.substring(0,FieldLen-1);
s += "<B>";
s += "<B> dB</B><BR></FONT></P></TD>";
s += "</TR>";
s += "</TBODY>";
s += "</TABLE>";
s += "</CENTER>";
s += "</BODY>";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(100);
}