2026年10月29日木曜日

CircuitPython おさらい

fseiigojp@fseigojpPC:~$  source circup-env/bin/activate

(circup-env) fseiigojp@fseigojpPC:~$ circup  adafruit_requests

Usage: circup [OPTIONS] COMMAND [ARGS]...

Try 'circup --help' for help.


Error: No such command 'adafruit_requests'.

(circup-env) fseiigojp@fseigojpPC:~$ circup install adafruit_requests

Found device raspberry_pi_pico2_w at /run/media/fseiigojp/CIRCUITPY, running CircuitPython 10.3.1.

Downloading 'py' bundle for adafruit/Adafruit_CircuitPython_Bundle (20261028).

py:

Extracting:  [####################################]  100%          


OK


Downloading '10mpy' bundle for adafruit/Adafruit_CircuitPython_Bundle (20261028).

10.x-mpy:

Extracting:  [####################################]  100%          


OK


Using latest bundle for adafruit/Adafruit_CircuitPython_Bundle (20261028).

Using latest bundle for adafruit/CircuitPython_Community_Bundle (20261008).

Searching for dependencies for: ['adafruit_requests']

Ready to install: ['adafruit_connection_manager', 'adafruit_requests']


Installed 'adafruit_connection_manager'.

Installed 'adafruit_requests'.

(circup-env) fseiigojp@fseigojpPC:~$ 

以後は同一LANでかつ2.5GHz帯であることが重要

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

settings.toml (設定ファイル)

同じくルート(CIRCUITPY ドライブの直下)に配置してください。これがないとWi-Fiに接続できません。

CIRCUITPY_WIFI_SSID = "あなたのWi-FiのSSID"
CIRCUITPY_WIFI_PASSWORD = "あなたのWi-Fiのパスワード"

ーーーcode.pyでmonitorはthonnyをもちいるーーーーーーーーーーー

import os

import ssl

import wifi

import socketpool

import adafruit_requests

# ----------------------------------------------------

# 1. Wi-Fiへの接続

# ----------------------------------------------------

print("Wi-Fiに接続中...")

try:

    # settings.toml からWi-Fi情報を読み込んで接続

    wifi.radio.connect(

        os.getenv("CIRCUITPY_WIFI_SSID"),

        os.getenv("CIRCUITPY_WIFI_PASSWORD")

    )

    print(f"接続成功! IPアドレス: {wifi.radio.ipv4_address}")

except Exception as e:

    print(f"Wi-Fi接続エラー: {e}")

    raise

# ----------------------------------------------------

# 2. ネットワークセッションのセットアップ

# --------------httpsのみでなくhttpにもアクセスできる--------------------------------------

pool = socketpool.SocketPool(wifi.radio)

ssl_context = ssl.create_default_context()

requests = adafruit_requests.Session(pool, ssl_context)

# ----------------------------------------------------

# 3. HTTP GET リクエストの送信

# ----------------------------------------------------

# テスト用のURL(JSONデータを返すパブリックAPI)

URL = "http://192.168.0.10:3000"

print(f"GETリクエストを送信中: {URL}")

try:

    response = requests.get(URL)

    print(f"ステータスコード: {response.status_code}")

    print("-" * 40)

    # パターンA: レスポンスを「テキスト」としてそのまま表示する場合

    print("【テキストとして表示】")

    print(response.text)

    print("-" * 40)

    # パターンB: レスポンスを「JSON」として解析して特定のデータを抜く場合

    print("【JSONとして解析して表示】")

    data = response.json()

    print(f"送信元IP (origin): {data.get('origin')}")

    print(f"ユーザーエージェント (headers): {data.get('headers', {}).get('User-Agent')}")

    # 使い終わったらクローズ

    response.close()

except Exception as e:

    print(f"リクエストエラー: {e}")

print("-" * 40)

print("処理が完了しました。")

---------------circup install adarfruit_dht  --------------------------------------
import time
import board
import adafruit_dht

# ピンの定義(例: board.D17 または board.GP15 など、使用するボードに合わせて変更)
dhtDevice = adafruit_dht.DHT11(board.GP15)

while True:
    try:
        # 温度と湿度の取得
        temperature_c = dhtDevice.temperature
        humidity = dhtDevice.humidity
        
        print(f"温度: {temperature_c:.1f} ℃ / 湿度: {humidity} %")

    except RuntimeError as error:
        # DHT11の読み取りエラーは頻発するため、エラー内容は無視してリトライ
        print(f"読み取りエラー (再試行中): {error.args[0]}")
    except Exception as error:
        dhtDevice.exit()
        raise error

    # DHT11の仕様上、測定間隔は2秒以上空ける
    time.sleep(2)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記を組み合わせると
import os
import ssl
import time
import board
import wifi
import socketpool
import adafruit_requests
import adafruit_dht

# ----------------------------------------------------
# 1. センサーとピンの初期化
# ----------------------------------------------------
# 接続するピンに合わせて変更してください(例: board.GP15, board.D17 など)
DHT_PIN = board.GP15 
dhtDevice = adafruit_dht.DHT11(DHT_PIN)

# ----------------------------------------------------
# 2. Wi-Fiへの接続
# ----------------------------------------------------
print("Wi-Fiに接続中...")
try:
    # settings.toml からWi-Fi情報を読み込んで接続
    wifi.radio.connect(
        os.getenv("CIRCUITPY_WIFI_SSID"),
        os.getenv("CIRCUITPY_WIFI_PASSWORD")
    )
    print(f"接続成功! IPアドレス: {wifi.radio.ipv4_address}")
except Exception as e:
    print(f"Wi-Fi接続エラー: {e}")
    raise

# ----------------------------------------------------
# 3. ネットワークセッションのセットアップ
# ----------------------------------------------------
pool = socketpool.SocketPool(wifi.radio)
ssl_context = ssl.create_default_context()
requests = adafruit_requests.Session(pool, ssl_context)

# Node.js サーバーのベースURLを指定 node app.jsでurl確認!
BASE_URL = "http://192.168.0.3:3000"

# ----------------------------------------------------
# 4. メインループ(計測とクエリパラメータでの送信)
# ----------------------------------------------------
while True:
    try:
        # DHT11からデータ取得
        temperature_c = dhtDevice.temperature
        humidity = dhtDevice.humidity
        
        print(f"計測成功 -> 温度: {temperature_c:.1f} ℃ / 湿度: {humidity} %")

        # サーバーの仕様に合わせてURLを組み立て
        # 出力例: http://192.168.0
        request_url = f"{BASE_URL}/update?t={temperature_c:.1f}&h={humidity}"

        # HTTP GETリクエストの送信
        print(f"GETリクエストを送信中: {request_url}")
        response = requests.get(request_url)
        
        print(f"ステータスコード: {response.status_code}")
        print("【レスポンス】")
        print(response.text)
        
        response.close()

    except RuntimeError as error:
        # DHT11の読み取りエラーは頻発するため、スキップして次回に期待
        print(f"センサー読み取りエラー (再試行します): {error.args}")
        
    except Exception as e:
        # ネットワークエラーやその他の例外処理
        print(f"エラーが発生しました: {e}")

    print("-" * 40)
    # 次の計測・送信まで5秒待機
    time.sleep(5)

2026年10月25日日曜日

aqm0802 on uno r3

 //-------------------------------------------------------------------------------------------

// Tested Module    : ERC1602-4, EASTRISING TECHNOLOGY CO,.LTD.

// Drive IC         : ST7032

// INTERFACE        : I2C

// VDD              : 2.7V-5.5V

// Tested with MCU : Arduino Uno, Attiny85@1mhz(5.0V), Attiny85@8mhz(5.0V) and ESP8266(3.3V)

//-------------------------------------------------------------------------------------------


#include <LCD_ST7032.h> // library managerでzipでなくて成功した

LCD_ST7032 lcd;


void setup() {

  lcd.begin();

  lcd.setcontrast(24); //contrast value range is 0-63, try 25@5V or 50@3.3V as a starting value

}


void loop() {

  static int counter = 0;

  

  // Write a piece of text on the first line...

  lcd.setCursor(0, 0);  //LINE 1, ADDRESS 0

  lcd.print("HelloYou");


  // Write the counter on the second line...

  lcd.setCursor(1, 0);

  lcd.print(counter/10, DEC);

  lcd.write('.');

  lcd.print(counter%10, DEC);

  lcd.write(' ');

  delay(500);

  counter++;

}

2026年10月24日土曜日

tinygo raspberry pi pico w cyw43439 cf http-clientは自作

soypat/cyw43439 の DHCP サンプル(main.go)を動かすための Wi-Fi 接続情報(SSIDとパスワード)は、指定されたディレクトリに ssid.text と password.text という名前のテキストファイルを作成することで設定します。 
TinyGoのビルド時に、これらのテキストファイルの中身が自動的に埋め込まれる仕組みになっています。
認証ファイルの作成場所と手順
examples/dhcp/main.go から見て、一つ上の階層にある cywnet/credentials/ ディレクトリの中にファイルを作成します。 
cywnet/credentials/ ディレクトリ配下に、以下の2つのファイルを改行を入れずに作成

  • ssid.text
    あなたのWi-FiのSSIDをそのまま入力して保存します。””はいれない。
    Your_WiFi_SSID_Name 
  •  password.text も同様
tinygo flash -target pico-w -monitor ./main.go でpicowがピカル

注:なるほど、ご自身のネットワークが 192.168.0.X なのに、コードが 192.168.1.99 を要求したまま正常に接続(DHCP完了)できてしまうのが不思議、ということですね!
これには、DHCPプロトコル(仕組み)の柔軟性と、今回のライブラリの処理が関係しています。不思議に思われるのも当然ですが、技術的には以下のような理由で「できてしまう」現象が起きます。

💡 なぜ動いてしまうのか? 2つの理由
理由1: ルーターが要求(192.168.1.99)を無視して「正しいIP」をくれたから
DHCPの仕組みにおいて、クライアント(Pico W)が送る requestedIP は、あくまで「このIPが使えたら嬉しいな」というただの希望(リクエスト)です。
ルーター(DHCPサーバー)はそれを受け取ったとき、以下のように判断します。
  1. 「うちのネットワークは 192.168.0.X だから、192.168.1.99 はダメだな」
  2. 「希望は却下するけれど、代わりにうちの空いている 192.168.0.X の正しいIPアドレスをあげるよ」
多くの一般的なルーターは、拒否(NAK)して通信を遮断するのではなく、このように親切に別の正しいIPアドレスを提案(Offer)してくれます。
理由2: ライブラリがルーターの提案を「そのまま受け入れた」から
このプログラムの後半(51行目付近)に、以下のコードがあります。
go
err = llstack.AssimilateDHCPResults(results)
コードは注意してご使用ください。
AssimilateDHCPResults(DHCP結果の同化・適用)という関数が動いています。
これは、「最初に自分が何を指定していようが、最終的にルーターから『これを使ってね』と割り当てられた結果(results)をPico Wの通信スタックに正しく上書きして適用する」という処理をしています。
そのため、シリアルモニターのログ(ourIP)をよく見ると、最初に設定した 192.168.1.99 ではなく、自動的にルーターから付与された 192.168.0.X のアドレスに化けているはずです。

📊 ログで確認してみましょう
プログラムが成功したときに出力される DHCP complete のログを確認してみてください。
text
// おそらくこのようなログが出ているはずです
DHCP complete ... ourIP=192.168.0.X ... router=192.168.0.1
コードは注意してご使用ください。
コードの requestedIP に何を書いていても、最終的にはルーターとPico Wの間で大人の解決(自動調整)が行われるため、不思議なことに何事もなかったかのように動いてしまうのです。 実際こうなっていた。賢いコードなり!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

go version go1.24.2 linux/amd64

tinygo version 0.41.1 linux/amd64 (using go version go1.24.2 and LLVM version 20.1.1)

以下をmain.goとしてgo mod init main & go mod tidyとするとgo.modに管理情報が設定

そして必要なライブラリがgo getされる あとは以下でコンパイルしてモニターOK

build and monitor:: tinygo flash -target pico-w -monitor ./main.go

Connected to /dev/ttyACM0. Press Ctrl-C to exit.
--- Raspberry Pi Pico W Wi-Fi Connection Start ---
CYW43439 chip initialized successfully.
Connecting to Wi-Fi SSID: Pikara2-91d8e4 ...
Wi-Fi Connected successfully!
ーーーーーーーーーーmain.goーーーーーーーーーー
package main

import (
"fmt"
"time"
"github.com/soypat/cyw43439"
)

const (
ssid     = "Pikara2-91d8e4"
password = ""
)

func main() {
// USBシリアル出力の安定待ち これ大事だろうと思う
time.Sleep(2 * time.Second)
fmt.Println("--- Raspberry Pi Pico W Wi-Fi Connection Start ---")

// 1. Pico W向けの専用関数でCYW43439デバイスを生成し、デフォルト設定で初期化
dev := cyw43439.NewPicoWDevice()
cfg := cyw43439.DefaultWifiConfig()

err := dev.Init(cfg)
if err != nil {
fmt.Printf("Failed to initialize CYW43439 chip: %v\n", err)
return
}
fmt.Println("CYW43439 chip initialized successfully.")

// 2. Wi-Fi ネットワークへ接続 (JoinメソッドとJoinOptionsを使用)
fmt.Printf("Connecting to Wi-Fi SSID: %s ...\n", ssid)

err = dev.Join(ssid, cyw43439.JoinOptions{
Passphrase: password,
})
if err != nil {
fmt.Printf("Wi-Fi Connection Failed: %v\n", err)
for {
time.Sleep(1 * time.Second)
}
}

// 3. 接続成功時の処理
fmt.Println("Wi-Fi Connected successfully!")

// プログラムが終了しないように維持
for {
time.Sleep(1 * time.Hour)
}
}


2026年10月23日金曜日

raspberry pi pico by arduino-ide (bme280,ssd1306)

// smpの有無は関係なし 

---------------------------------------------------------

#include <Wire.h>

#include <Adafruit_BME280.h>

Adafruit_BME280 bme; // I2C接続


void setup() {

  Serial.begin(115200);

  while(!Serial);

  // BME280のI2Cアドレスは一般的に 0x76 または 0x77

  if (!bme.begin(0x76)) {

    Serial.println("Could not find a valid BME280 sensor, check wiring!");

    while (1);

  }

}


void loop() {

  Serial.print("Temperature = ");

  Serial.print(bme.readTemperature());

  Serial.println(" *C");


  Serial.print("Pressure = ");

  Serial.print(bme.readPressure() / 100.0F);

  Serial.println(" hPa");


  Serial.print("Humidity = ");

  Serial.print(bme.readHumidity());

  Serial.println(" %");


  delay(1000);

}

---------------------------------------------------

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>


#define SCREEN_WIDTH 128 // OLEDの幅(ピクセル)

#define SCREEN_HEIGHT 64 // OLEDの高さ(ピクセル)※32の場合は32に変更


// SSD1306ディスプレイの宣言(リセットピンがない場合は -1)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);


void setup() {

  Serial.begin(115200);


  // SSD1306のI2Cアドレスは一般的に 0x3C

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 

    Serial.println(F("SSD1306 allocation failed"));

    for(;;); // 起動失敗時はここでストップ

  }

  

  display.clearDisplay(); // 画面バッファをクリア

  display.setTextSize(1);      // 文字サイズ(1〜)

  display.setTextColor(SSD1306_WHITE); // 文字色(白)

  display.setCursor(0, 0);     // 左上にカーソルを移動

  

  display.println("Hello, Pico!");

  display.println("SSD1306 OLED Test");

  display.display(); // 実際に画面に描画を反映

}


void loop() {

  // ループ処理(今回は静止画面のまま)

}

kalumajs esp8266httpclient OK, but http-client-raspicow Drafted

--------------以下は最初は動くがだんだんremote errorとなる。。。。tethering revenge

kill -9 $(lsof -t -i:3000)でいちいちportを閉じるのが重要だった

//$ mkdir thermo-server

// $ cd thermo-server

//$ npm init -y

//$ npm install express ip --save

-----------原著どうり-----wifi環境よわく、tetheringで動かしてOKだった----------------------------

const express = require('express');

const ip = require('ip');

const app = express();

const addr = ip.address();

const port = 3000;

let temperature = '0.0';

let humidity = '0';

app.get('/update', (req, res) => {

   if (req.query.t) temperature = req.query.t;

   if (req.query.h) humidity = req.query.h;

res.status(200).send('OK');

});

app.get('/', (req, res) => {

  res.setHeader('Content-Type', 'text/html');

  res.send(`

<html>

  <body>

   <h1>${temperature}</h1>

   <h1>${humidity}</h1>

  </body>

</html>

  `);

});

--- index.js------------これも原著どうりだ、ATベタ書きはパスした--------

const {DHT} = require('dht');
const {ESP8266HTTPClient} = require('esp8266-http-client');
const dht = new DHT(15,DHT.DHT11);
const esp = new ESP8266HTTPClient();

// ここでコンストラクタのくだりを読むとssid,passwordが設定される仕組み
// よってesp.wifi()でコネクトできる

storage.setItem('WIFI_SSID', 'HUAWEI@nova@lite@3+');
storage.setItem('WIFI_PASSWORD', '99991111');
storage.setItem('ADDRESS', '192.168.43.140'); // nodejsで決定されるIP
storage.setItem('PORT', '3000');
const addr = storage.getItem('ADDRESS');
const port = storage.getItem('PORT');

function start(){
 setInterval(() => {
  dht.read();
  let t = dht.temperature.toFixed(1);
  let h = dht.humidity.toFixed(0);
  esp.http(`http:://${addr}:${port}/update?t=${t}&h=${h}`)
   .then(() => {
     console.log(`/update?${t}&h=${h}`);
   });
  },10000);
}

esp.wifi().then(() => {
  console.log('wifi connected');
  start();
}).catch(err => {
  console.log('wifi connect failed');
  console.log(err);
});


-----------------------------------
以下がモタモタコード....

const { DHT } = require('dht');
const { WiFi } = require('wifi');
const http = require('http');

// Wi-Fi設定
const WIFI_SSID = 'HUAWEI@nova@lite@3+';
const WIFI_PASSWORD = '99991111';

// Node.jsサーバー
const SERVER_ADDRESS = '192.168.43.140';
const SERVER_PORT = 3000;

// DHT11:GP15
const dht = new DHT(15, DHT.DHT11);
const wifi = new WiFi();

let sending = false;
let timerStarted = false;

// HTTP送信
function sendData() {
  if (sending) {
    console.log('Previous request is running');
    return;
  }

  let temperature;
  let humidity;

  try {
    dht.read();

    temperature = dht.temperature;
    humidity = dht.humidity;

    if (
      typeof temperature !== 'number' ||
      typeof humidity !== 'number' ||
      !Number.isFinite(temperature) ||
      !Number.isFinite(humidity)
    ) {
      console.log('Invalid DHT11 data:',
        temperature, humidity);
      return;
    }

    temperature = temperature.toFixed(1);
    humidity = humidity.toFixed(0);
  } catch (err) {
    console.log('DHT11 read error:', err);
    return;
  }

  const path =
    '/update?t=' + encodeURIComponent(temperature) +
    '&h=' + encodeURIComponent(humidity);

  sending = true;

  console.log('HTTP GET:', path);

  let req;

  try {
    req = http.get({
      host: SERVER_ADDRESS,
      port: SERVER_PORT,
      path: path
    }, function (res) {
      console.log('HTTP status:', res.statusCode);

      res.on('data', function (chunk) {
        console.log('HTTP body:', chunk);
      });

      res.on('end', function () {
        console.log('HTTP response complete');
        sending = false;
      });

      res.on('error', function (err) {
        console.log('HTTP response error:', err);
        sending = false;
      });

      res.on('close', function () {
        // endイベントが発生しない場合にも送信状態を解除
        sending = false;
      });
    });

    req.on('error', function (err) {
      console.log('HTTP request error:', err);
      sending = false;
    });
  } catch (err) {
    console.log('HTTP start error:', err);
    sending = false;
  }
}

// Wi-Fi接続成功後に開始
function start() {
  if (timerStarted) return;
  timerStarted = true;

  console.log('Wi-Fi connected');

  sendData();

  setInterval(function () {
    sendData();
  }, 10000);
}

// 起動
console.log('Connecting to Wi-Fi...');

wifi.connect({
  ssid: WIFI_SSID,
  password: WIFI_PASSWORD
}, function (err) {
  if (err) {
    console.log('Wi-Fi connect failed:', err);
    return;
  }

  start();
});

2026年10月19日月曜日

tinygo on pico with sht35(sh3xシリーズ)

// go get tinygo.org/x/drivers

// tinygo flash -target pico . after set boot mode at pico

package main

import (

"fmt"

"machine"

"time"

"tinygo.org/x/drivers/sht3x"

)


func main() {

// シリアル通信(USB)の準備を待つためのディレイ

time.Sleep(2 * time.Second)

fmt.Println("--- SHT3x 温湿度センサー 開始 ---")


// 1. I2Cの初期化 (Picoの標準ピン GPIO4/GPIO5 を使用)

err := machine.I2C0.Configure(machine.I2CConfig{

Frequency: machine.TWI_FREQ_400KHZ, // 400kHz

SDA:       machine.GP4,             // Pin 6

SCL:       machine.GP5,             // Pin 7

})

if err != nil {

println("I2Cの初期化に失敗しました:", err.Error())

return

}


// 2. SHT3x ドライバーの初期化

// ※ アドレスはモジュールによって 0x44 (デフォルト) または 0x45 です。

// ※ 動かない場合は sht3x.AddressB (0x45) に変更してみてください。

sensor := sht3x.New(machine.I2C0)

sensor.Address = sht3x.AddressA // 0x44


// 3. 2秒ごとにデータを読み取って表示するループ

for {

// センサーから温度と湿度を読み取る

//(内部でSHT3xのコマンド送信、データ取得、CRCチェックが行われます)

temp, humi, err := sensor.ReadTemperatureHumidity()

if err != nil {

fmt.Println("データの読み取りに失敗しました:", err.Error())

} else {

// tinygoのドライバーは、温度を「ミリ度(1/1000℃)」、湿度を「1/100 %」で返します

// 例: 25000ミリ度 = 25.00℃

tCelsius := float64(temp) / 1000.0

hPercent := float64(humi) / 100.0

// シリアルモニターに出力

fmt.Printf("温度: %.2f °C | 湿度: %.2f %%\n", tCelsius, hPercent)

}

time.Sleep(2 * time.Second)

}

}

2026年10月12日月曜日

MMBasic ファイル操作(picocom最終版)

picocom -b 115200 --omap delbs -s "sz --xmodem" /dev/ttyACM0 で転送可能となる 

ctl-a,ctl-xで終了

https://qiita.com/ksakabe/items/2ecfcfd346ef7f857b34 も参考になる

mmbasic picocomでpcからpicoへmmbasicを贈りたいPicoMite (MMBasic) 

を実行中のRaspberry Pi PicoへPCからファイルを転送するには、Pico側のXMODEM RECEIVEコマンドと、picocom のXMODEM送信機能(Ctrl-A 続いて Ctrl-S) を組み合わせて使用します。あらかじめホストPC側に lrzsz(sxコマンド)をインストール。

1.転送の手順PicoMite側で受信待機picocomでPicoに接続します。MMBasicのプロンプトで次のように入力してEnterキーを押します。

XMODEM RECEIVE 

コードは注意してご使用ください。(※画面が止まった/待機状態になったようになります)

picocomからファイルを送信キーボードの

Ctrl-A を押し、続けて Ctrl-Sを押します。画面下部に送信する、そのPCディレクトリのファイルのパス(ファイル名)を尋ねられるので、PC側のファイル名を入力してEnterキーを押すと転送が始まります。

cf 保存されたファイルの一覧を見る

(FILES)SDカードや内蔵フラッシュドライブに保存されているファイル名の一覧を表示します。basic FILES

2. ファイルの中身を画面に表示する

(TYPE)転送されたプログラムの内容が正しいか、テキストとして画面に表示して確認します。basic TYPE "try.bas"

3. プログラムをメモリに読み込んで実行する 

(LOAD RUN)ファイルをメモリにロードして実行します。basic LOAD "try.bas" RUN

4.プログラムをメモリからセーブしてマイコンでfilesできるようにする

(SAVE) basic SAVE "filename.bas"

5.プログラムをその場で編集・確認する

(EDIT)PicoMite内蔵のフルスクリーンエディタでファイルを開きます。basic EDIT "try.bas"

F1 キー(またはCtrl+Q)を押すとメニューが出るので、保存して終了、または保存せずに終了を選べます。

6.メモリ上のプログラムを消去するにはbasic new,

フラッシュ上のプログラムを消去するにはbasic kill  "filename.bas"

----------------------------------------------------------------------------