2026年6月10日水曜日

少し挙動がおかしいwebserver on raspicow(need refactor)

 #include <WiFi.h>

const char* ssid = "Pikara2-91d8e4";

const char* password = "090e219cbdbf5";

WiFiServer server(80);

const int LED_PIN = LED_BUILTIN;

void setup() {

  Serial.begin(115200);

  pinMode(LED_PIN, OUTPUT);

  digitalWrite(LED_PIN, LOW);

  Serial.println("Connecting...");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println();

  Serial.println("WiFi connected");

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP());


  server.begin();

}


void loop() {

  WiFiClient client = server.available();


  if (!client) {

    return;

  }


  Serial.println("New Client");


  String request = client.readStringUntil('\r');

  Serial.println(request);


  if (request.indexOf("/ON") >= 0) {

    digitalWrite(LED_PIN, HIGH);

  }


  if (request.indexOf("/OFF") >= 0) {

    digitalWrite(LED_PIN, LOW);

  }


  client.println("HTTP/1.1 200 OK");

  client.println("Content-Type: text/html");

  client.println("Connection: close");

  client.println();


  client.println("<html><body>");

  client.println("<h1>Pico W Web Server</h1>");

  client.println("<a href=\"/ON\">LED ON</a><br>");

  client.println("<a href=\"/OFF\">LED OFF</a>");

  client.println("</body></html>");


  delay(1000);

  client.stop();

}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

以下のリファクタが回答された

#include <WiFi.h>


const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASSWORD";


WiFiServer server(80);


void sendPage(WiFiClient& client)

{

  bool ledState = digitalRead(LED_BUILTIN);


  client.println("HTTP/1.1 200 OK");

  client.println("Content-Type: text/html; charset=UTF-8");

  client.println("Connection: close");

  client.println();


  client.println("<!DOCTYPE html>");

  client.println("<html>");

  client.println("<head>");

  client.println("<meta charset='utf-8'>");

  client.println("<meta name='viewport' content='width=device-width,initial-scale=1'>");

  client.println("<title>Pico W LED</title>");

  client.println("</head>");

  client.println("<body>");

  client.println("<h1>Pico W Web Server</h1>");


  if (ledState)

    client.println("<p><b>LED = ON</b></p>");

  else

    client.println("<p><b>LED = OFF</b></p>");


  client.println("<p><a href='/ON'><button style='font-size:24px'>LED ON</button></a></p>");

  client.println("<p><a href='/OFF'><button style='font-size:24px'>LED OFF</button></a></p>");


  client.println("</body>");

  client.println("</html>");

}


void setup()

{

  Serial.begin(115200);

  delay(2000);


  pinMode(LED_BUILTIN, OUTPUT);

  digitalWrite(LED_BUILTIN, LOW);


  Serial.println();

  Serial.println("Connecting WiFi...");


  WiFi.begin(ssid, password);


  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }


  Serial.println();

  Serial.println("WiFi Connected");

  Serial.print("IP Address: ");

  Serial.println(WiFi.localIP());


  server.begin();


  Serial.println("Server Started");

}


void loop()

{

  WiFiClient client = server.available();


  if (!client)

  {

    delay(1);

    return;

  }


  Serial.println("Client Connected");


  String request = "";


  unsigned long timeout = millis();


  while (client.connected() && millis() - timeout < 2000)

  {

    if (client.available())

    {

      char c = client.read();

      request += c;


      if (request.endsWith("\r\n\r\n"))

      {

        break;

      }

    }

  }


  Serial.println("----- REQUEST -----");

  Serial.println(request);


  if (request.indexOf("GET /ON") >= 0)

  {

    digitalWrite(LED_BUILTIN, HIGH);


    client.println("HTTP/1.1 303 See Other");

    client.println("Location: /");

    client.println("Connection: close");

    client.println();

  }

  else if (request.indexOf("GET /OFF") >= 0)

  {

    digitalWrite(LED_BUILTIN, LOW);


    client.println("HTTP/1.1 303 See Other");

    client.println("Location: /");

    client.println("Connection: close");

    client.println();

  }

  else

  {

    sendPage(client);

  }


  delay(10);

  client.stop();


  Serial.println("Client Disconnected");

}

2026年6月8日月曜日

wio terminal はずれ

ウィンドウズでonedriveに勝手にarduinoが割り当てられていたので

c:Arduinoフォルダを作って、preferenceで既定フォルダをそれにしてlibraryもコピーした

コンパイルも焼きこみも無事に終了 しかしdraw failed 

そもそも購入したのがハズレでSDの読みが不安定(最後までカチとならん)

買いなおすのもしゃくだな。。。

 #include <LGFX_AUTODETECT.hpp>

#include <SPI.h>
#include "Seeed_FS.h"
#include "SD/Seeed_SD.h"

static LGFX tft;

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Serial.println();
  Serial.println("=== JPEG TEST ===");

  // LCD初期化
  tft.init();
  tft.setRotation(3);

  pinMode(LCD_BACKLIGHT, OUTPUT);
  digitalWrite(LCD_BACKLIGHT, HIGH);

  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_WHITE);
  tft.setCursor(0, 0);

  // SDカード初期化
  Serial.println("SD init...");

  if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) {
    Serial.println("SD FAIL");
    tft.println("SD FAIL");
    return;
  }

  Serial.println("SD OK");
  tft.println("SD OK");

  // JPEGオープン
  File jpg = SD.open("/sample.jpg");

  if (!jpg) {
    Serial.println("OPEN FAIL");
    tft.println("OPEN FAIL");
    return;
  }

  Serial.print("FILE SIZE = ");
  Serial.println(jpg.size());

  // 先頭16バイト表示
  uint8_t buf[16];

  int n = jpg.read(buf, sizeof(buf));

  Serial.print("HEAD = ");

  for (int i = 0; i < n; i++) {
    if (buf[i] < 16) Serial.print('0');
    Serial.print(buf[i], HEX);
    Serial.print(' ');
  }

  Serial.println();

  // ファイル先頭へ戻す
  jpg.seek(0);

  Serial.println("DRAW JPEG...");

  bool result = tft.drawJpg(&jpg, jpg.size(), 0, 0);

  jpg.close();

  if (result) {
    Serial.println("JPEG DRAW OK");
  } else {
    Serial.println("JPEG DRAW FAILED");
    tft.setCursor(0, 20);
    tft.println("JPEG DRAW FAILED");
  }
}

void loop() {
}

2026年6月7日日曜日

tinygo-wioterminal(button-int-with-chatteringOK)

// チャタリング対策ずみコード チャット君に聞いた 

package main

import (

"machine"

"time"

)


func main() {

button1 := machine.BUTTON_1

button1.Configure(machine.PinConfig{

Mode: machine.PinInput,

})


led := machine.LED

led.Configure(machine.PinConfig{

Mode: machine.PinOutput,

})


var changed bool


button1.SetInterrupt(machine.PinToggle, func(machine.Pin) {

changed = true

})


for {

if changed {

// チャタリングが収まるまで待つ

time.Sleep(30 * time.Millisecond)


led.Set(button1.Get())


changed = false

}


time.Sleep(1 * time.Millisecond)

}

}

2026年6月5日金曜日

esp8266 async server not OK / esp32 async server OK

 lion(wmos)d1 esp w-room-02でいけた.asyncはだめのようだ。。。。チャットくんによるとRAMがたりんげな

esp32 dev module(devkit-c中華パチもん)でasyncばっちりでした

xiao rp2040 & microblocks 最高

 arduinoIDEめちゃ遅い、platformIOうごかん、micropython,ardupy,circuitpython全滅

しかしhttps://wiki.seeedstudio.com/ja/xiao_rp2040_microblocks/ microblocks偉大なり

2026年6月3日水曜日

mmbasic on raspberry pi pico/w(ドラフト)

 https://qiita.com/ksakabe/items/3d8f97e6fe8b1122da72 イントロサイト

https://qiita.com/ksakabe/items/f14c89bdbeeadb3848ea にあるファームウエア群は

https://geoffg.net/picomite.html にある 

https://qiita.com/ksakabe/items/f14c89bdbeeadb3848eaで各々の比較がある

とりあへずPicoMiteRP2040をいれてみた

teratermは115200baudにして、受信をauto、送信をcr+lfにした

フルスクリーンエディタの起動と操作手順
  1. エディタの起動
    コマンドプロンプト(>)の状態で、以下のいずれかを入力・実行します。
    • EDIT と入力して Enter キーを押す
    • または、キーボードの F4 キー を押す
  2. プログラムの入力
    画面全体がエディタに切り替わります。キーボードで自由にBASICのコードを入力・編集してください。
  3. 保存してエディタを閉じる
    入力が終わったら、キーボードの F2 キー を押すと、プログラムを保存して元のコマンドプロンプト画面に戻ります。
  4. プログラムの実行
    プロンプトに戻ったら RUN と入力して Enter キーを押すことで、作成したプログラムを実行できます。
    [1, 2]

エディタ内の便利な機能(ショートカットキー)
エディタ起動中、画面の一番下の行にファンクションキーの機能が表示されます。主なショートカットキーは以下の通りです: [1]

  • F2 キー:プログラムを保存してエディタを終了する
  • F4 キー:変更を破棄して(保存せずに)エディタを終了する
  • F7 キー:行のコピー
  • F8 キー:行の切り取り(カット)
  • F9 キー:行の貼り付け(ペースト)
  • F10 キー:検索と置換 [1]
ーーーーーーーーーーーーーーーーーーーーーーー
Dim Float t, h 
Dim Integer pin = 22 ' 使用するピン番号 
 Print "DHT温湿度センサーの測定を開始します..." 
 Pause 1000 ' センサーの起動待ち
Do ' DHTタイプの指定 (DHT11またはDHT22をコメントアウトで切り替え) 
 DHT pin, DHT22, t, h 
' DHT pin, DHT11, t, h 
' エラーチェック 
 If t = -999.0 Then Print "センサーの読み取りに失敗しました" 
 Else Print "温度: "; Str$(t, 3, 1); " °C" Print "湿度: "; Str$(h, 3, 1); " %" 
 EndIf ' 2秒間隔で測定 (DHTの仕様上、最低でも2秒の間隔をあけてください) 
 Pause 2000 
Loop

そのほかhttp://blog.livedoor.jp/yokoshima_m/tag/MMBASICも参考になりそう。。。

wioterminal arduino (ドラフト)

 

5-2は以下でうごいた やはマイク感度は不安定? なお5-6など、このあとほかのスケッチがかけなくなった
場合はプログラムが暴走しているのでリセットかけてスケッチ書けるようになる

#include <LGFX_AUTODETECT.hpp>
#include <LovyanGFX.hpp>
static LGFX tft;

void setup() {
  // 液晶の初期化など
  tft.begin();
  digitalWrite(LCD_BACKLIGHT, HIGH);
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);

  // マイクを入力に設定
  pinMode(WIO_MIC, INPUT);
}

void loop() {
  int val = analogRead(WIO_MIC);
  tft.println(val);
  delay(1000);
}

5-4は以下でうごいた 画面はちらつくが今後の課題  5-8も最初の1行追加でうごいた

#include <LGFX_AUTODETECT.hpp>

#include <LovyanGFX.hpp>

#include "LIS3DHTR.h"

static LGFX tft;

LIS3DHTR<TwoWire> lis;

void setup() {

  tft.begin();

  pinMode(LCD_BACKLIGHT, OUTPUT);

  digitalWrite(LCD_BACKLIGHT, HIGH);

  tft.setRotation(1);

  Wire1.begin();

  lis.begin(Wire1);

  lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ);

  lis.setFullScaleRange(LIS3DHTR_RANGE_2G);

}


void loop() {

  float x = lis.getAccelerationX();

  float y = lis.getAccelerationY();

  float z = lis.getAccelerationZ();

  tft.fillScreen(TFT_BLACK);

  tft.setCursor(0,0);

  tft.setTextSize(2);


  tft.printf("X = %.2f\n", x);

  tft.printf("Y = %.2f\n", y);

  tft.printf("Z = %.2f\n", z);

  delay(100);

}

以下で成功、最初の行が追加必要であった 4-3 ちなみに4-2も同様だった

#include <LGFX_AUTODETECT.hpp>

#include <LovyanGFX.hpp>
static LGFX tft;

void setup() {
  // 液晶の初期化など
  tft.begin();
  digitalWrite(LCD_BACKLIGHT, HIGH);
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);

  tft.setTextDatum(MC_DATUM);
  tft.setFont(&fonts::efontJA_12);
  tft.drawString("日本語16px", 160, 80);
}

void loop() {
}


3-3 訂正が必要だった 

#define LGFX_WIO_TERMINAL
#define LGFX_AUTODETECT
#define LGFX_USE_V1
#include <LovyanGFX.hpp>
#include <LGFX_AUTODETECT.hpp>

static LGFX tft;

void setup() {
  // 液晶の初期化など
  tft.begin();
  digitalWrite(LCD_BACKLIGHT, HIGH);
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);
}

void loop() {
  // ランダムな場所に四角形や円、文字列を描画する
  // ランダムな座標
  int x = random(0, 320);
  int y = random(0, 240);
  int r = random(10, 100);

  // ランダムな色
  int red = random(0, 256);
  int green = random(0, 256);
  int blue = random(0, 256);
  int color = tft.color565(red, green, blue);

  switch (random(0, 3)) {
    case 0:
      // 円
      tft.fillCircle(x, y, r, color);
      break;
    case 1:
      // 四角形
      tft.fillRect(x - r, y - r, r * 2, r * 2, color);
      break;
    case 2:
      // 文字列
      tft.setTextDatum(CC_DATUM);
      tft.setTextColor(color);
      tft.drawString("Wio Terminal", x, y);
  }
}