2026年6月19日金曜日

raspberry pi pico by arduinoIDE using freertos

port uf2boardとなるようにブートモードでrapsicoをつなぐがportが出てこん場合は

以下の設定変更を実施する必要あり

[ツール]→[Upload Method]の設定値 default uf2とする

[ツール]→[Operating system]の設定値 freeRTOS SMPとする

以下が書き込み成功したらserial monitorのportをCOMnにすると

どんな表示スピードでもOKとなる なんでやろ?

#define __FREERTOS 1
#include <FreeRTOS.h>
#include <task.h>

// タスク1:Lチカを行う処理
void taskBlink(void *pvParameters) {
  pinMode(LED_BUILTIN, OUTPUT);
  while(1) {
    digitalWrite(LED_BUILTIN, HIGH);
    vTaskDelay(pdMS_TO_TICKS(500)); // 500ms待機
    digitalWrite(LED_BUILTIN, LOW);
    vTaskDelay(pdMS_TO_TICKS(500));
  }
}

// タスク2:シリアル通信でメッセージを出力
void taskPrint(void *pvParameters) {
  while(1) {
    Serial.println("Task 2 is running...");
    vTaskDelay(pdMS_TO_TICKS(1000)); // 1000ms待機
  }
}

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

  // タスク1の生成 (タスク関数, タスク名, スタックサイズ, パラメータ, 優先度, ハンドル)
  xTaskCreate(taskBlink, "BlinkTask", 128, NULL, 1, NULL);

  // タスク2の生成
  xTaskCreate(taskPrint, "PrintTask", 128, NULL, 1, NULL);

  // vTaskStartScheduler() は自動的に呼ばれるためsetup内に記述不要
}

void loop() {
  // FreeRTOSを使用している場合、loop関数は使用しないか、
  // 最低でも vTaskDelay などの待機処理を組み込む必要があります。
}

2026年6月10日水曜日

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

 #include <WiFi.h>

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

const char* password = "";

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 sdcard (レッツトライ)

ウィンドウズで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 上記はうごくかどうか不明

チャット君によれば以下の通りでうごいた
MMBASICの HUMID コマンドは、デフォルトで上位モデルの「DHT22(AM2302)」を読み取る設定になっています。DHT11を使用する場合は、コマンドの末尾に 1(または , 1, DHT11)という引数を明示的に追加する必要があります。 [1, 2]
DHT11に対してDHT22用のデータ解析を行うと、データの桁(ビット配置)が異なるため、湿度が 1000%100% といった異常値として表示されてしまいます。
修正コード
Device HUMID GP28, temp, humidity の行の末尾に、DHT11を意味する引数「1」を追加してください。 [1, 2]
basic
' DHT11 センサー読み取りサンプル(修正版)

Dim FLOAT temp, humidity

Do
  ' ★ 末尾に「, 1」を足してDHT11モードに指定します
  Device HUMID GP28, temp, humidity, 1
  
  Print "Temperature: "; temp; " C"
  Print "Humidity:    "; humidity; " %"
  Print "-------------------------"
  
  ' DHT11は連続読み取りに弱いため、少し長め(2秒)に待つのが確実です
  Pause 2000
Loop

うごいた!

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