ESP8266 WiFi 電界強度計 LCDをTS206に

先日製作した、WiFi電界強度計、表示のLCDを安価な、Aitendo の TS-206 に変更してみた。7セグメントの表示しかできないが、値段が100円なのでMLA48のメンバーに頒布するにあたって、コストが下げられる。表示も大きく、バックライトもついているので見やすい。なぜだか正面からみるよりも多少斜めから見るほうが見やすい。他の設定があるのだろうか。
イメージ 1

ネットを検索すると先人が提供してくれたライブラリがいくつかあるので、今回は、ここのライブラリを使用した。

イメージ 2
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);
}