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"

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



mmbasic pcのファイルをraspicoとやりとりしたい!!

 sudo picocom -b 115200 --omap delbs /dev/ttyACM0と,もう一つxterminalを立ち上げる

1. MMBasic 側で受信待機にする

MMBasic のプロンプトで以下のいずれかを実行します(保存先に応じて選んでください)。
  • プログラムメモリ(RAM)に直接読み込む場合:
    basic
    XMODEM RECEIVE
    
    コードは注意してご使用ください。
  • SDカードやフラッシュ内のファイルとして保存する場合:
    basic
    XMODEM RECEIVE "foo.bas"
    
    コードは注意してご使用ください。
2. Linux(PC)側から XMODEM で送信する
使用しているシリアル通信環境に合わせて、sx コマンドを使ってファイルを送信します。 [1, 2]
GNU screen を使用している場合:
シリアルセッション中に Ctrl+A を押した後、:exec !! sx foo.bas と入力するか、一度端末をバックグラウンドにして以下のようにリダイレクトします。 [1]
bash
sx foo.bas < /dev/ttyACM0 > /dev/ttyACM0
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
まずエディタからもどってRAM内容をsave "foo.bas"とする
成功しているかfilesで確認する
1. MMBasic(マイコン)側で送信コマンドを実行する
MMBasicのプロンプトで、送信したいファイル名を指定して XMODEM SEND(または省略形の XMODEM S)を実行します。 [1, 2]
  • SDカードやフラッシュ内のファイルを送信する場合:
    basic
    XMODEM SEND "foo.bas"
    
    コードは注意してご使用ください。
  • 現在メモリ(RAM)にあるプログラムをそのまま送信する場合:
    basic
    XMODEM SEND
    
    コードは注意してご使用ください。
コマンドを実行すると、マイコンはPC側からの受信開始合図(NAK文字など)を待つ状態(待機状態)になります。 [1, 2]
2. PC(Linux)側で XMODEM 受信を実行する
マイコンが待機状態になったら、60秒以内にPC側で受信コマンドを実行してください。Linuxでは rx コマンド(XMODEM受信ツール)を使用します。 [1]
一般的なシリアルポート(例: /dev/ttyACM0)で直接やり取りする場合:
端末(ターミナル)を開き、以下のコマンドを実行してファイルを受け取ります。
bash
rx foo.bas < /dev/ttyACM0 > /dev/ttyACM0
コードは注意してご使用ください。

Circuitpython on wioterminal/raspberrry pi pico

 https://gist.github.com/stonehippo/03677c206bf68846328f151ee8322193 ::

 wio terminal examples

https://www.denshi.club/parts/2021/03/circuitpython-10-step5-1-raspberry-pi-pico.html::

raspberry pi pico


2026年10月11日日曜日

wioterminal and circuitpython v10 and circup

 Using a Python Virtual Environment (Recommended)

on bash at root dir , I successed!

python3 -m venv circup-env

source circup-env/bin/activate

pip install circup

circup --version

再度circupを使用するにはroot dirでsource circup-env/bin/activate


2026年10月10日土曜日

pico-examplesの個別コードだけのコンパイル

 たとえばpico-examplesのなかのblinkだけをコンパイルする場合

blinkにおりてCMakeLists.txtを以下のようにした

cmake_minimum_required(VERSION 3.13)


include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)


project(blink C CXX ASM)


pico_sdk_init()


add_executable(blink

    blink.c

)


target_link_libraries(blink

    pico_stdlib

)


if (PICO_CYW43_SUPPORTED)

    target_link_libraries(blink

        pico_cyw43_arch_none

    )

endif()


pico_add_extra_outputs(blink)

そして
rm -rf build
mkdir build
cd build
cmake ..

設定が成功した! 次に以下を実行

bash
cmake --build . -j$(nproc)

2026年10月3日土曜日

tinygo on pico with esp01 :: wifi connect and ip get code

package main

import (
    "fmt"
    "machine"
    "strings"
    "time"
)

const (
    SSID     = "Pikara2-91d8e4"
    PASSWORD = ""
)

// ==================================================
// ATコマンドをESP-01へ送信して応答を表示
// ==================================================
func sendAT(uart *machine.UART, cmd string, wait time.Duration) string {

    fmt.Println("=> Send:", cmd)

    // ATコマンド送信
    uart.Write([]byte(cmd + "\r\n"))

    var buf [256]byte
    var response strings.Builder

    start := time.Now()

    for time.Since(start) < wait { // wait時間内は応答をまつ

        // TinyGoでは Read() は (int, error)
        n, _ := uart.Read(buf[:])

        if n > 0 {
            s := string(buf[:n])
            // 応答を保存
            response.WriteString(s)
            // 受信内容を表示
            fmt.Print(s)
            // OKなら終了
            if strings.Contains(response.String(), "OK") {
                break
            }
            // ERRORなら終了
            if strings.Contains(response.String(), "ERROR") {
                break
            }
        }

        time.Sleep(10 * time.Millisecond)
    }

    return response.String()
}

// ==================================================
// ESP-01のAT+CIFSR応答からIPアドレスを抽出
//
// 例:
// +CIFSR:STAIP,"192.168.1.20"
// ==================================================
func extractIP(s string) string {

    lines := strings.Split(s, "\n")

    for _, line := range lines {

        line = strings.TrimSpace(line)

        if strings.Contains(line, "STAIP") {

            // 最初の " を探す
            start := strings.Index(line, `"`)

            if start < 0 {
                continue
            }

            // 2個目の " を探す
            end := strings.Index(line[start+1:], `"`)

            if end < 0 {
                continue
            }

            return line[start+1 : start+1+end]
        }
    }

    return ""
}

// ==================================================
// メイン
// ==================================================
func main() {
    // ==================================================
    // Raspberry Pi Pico
    //
    // GP0 = UART0 TX -> ESP-01 RX
    // GP1 = UART0 RX <- ESP-01 TX
    //
    // GND ------------- GND
    // ==================================================
    uart := machine.UART0
    uart.Configure(machine.UARTConfig{
        BaudRate: 115200,
        TX:       machine.GP0,
        RX:       machine.GP1,
    })
    // ESP-01起動待ち
    time.Sleep(3 * time.Second)

    fmt.Println()
    fmt.Println("================================")
    fmt.Println(" Raspberry Pi Pico + ESP-01")
    fmt.Println(" WiFi connection")
    fmt.Println("================================")
    fmt.Println()
    // ==================================================
    // UART受信バッファをクリア 空読みで
    // ==================================================
    var dummy [64]byte
    for uart.Buffered() > 0 {
        _, _ = uart.Read(dummy[:])
    }
    // ==================================================
    // ESP-01動作確認
    // ==================================================
    response := sendAT(
        uart,
        "AT",
        1*time.Second,
    )
    if strings.Contains(response, "ERROR") {
        fmt.Println("ESP-01 did not respond.")
        return
    }
    // ==================================================
    // Wi-Fi Stationモード
    // ==================================================
    sendAT(
        uart,
        "AT+CWMODE=1",
        1*time.Second,
    )
    // ==================================================
    // Wi-Fiアクセスポイントへ接続
    // ==================================================
    cmd := `AT+CWJAP="` + SSID + `","` + PASSWORD + `"`

    fmt.Println()
    fmt.Println("Connecting to WiFi...")
    fmt.Println("SSID:", SSID)

  // 十分時間をとってアクセスする 

   response = sendAT(
        uart,
        cmd,
        20*time.Second,
    )

    // Wi-Fi接続エラー
    if strings.Contains(response, "ERROR") {

        fmt.Println()
        fmt.Println("WiFi connection failed.")
        return
    }

    // ==================================================
    // IPアドレス取得
    // ==================================================

    fmt.Println()
    fmt.Println("Getting IP address...")

    response = sendAT(
        uart,
        "AT+CIFSR",
        3*time.Second,
    )

    // ==================================================
    // IPアドレス抽出
    // ==================================================

    ip := extractIP(response)

    fmt.Println()

    if ip != "" {

        fmt.Println("==============================")
        fmt.Println(" WiFi connected!")
        fmt.Println()
        fmt.Println(" IP address:", ip)
        fmt.Println("==============================")

    } else {

        fmt.Println("==============================")
        fmt.Println(" IP address could not be obtained.")
        fmt.Println("==============================")
    }

    // ==================================================
    // ここで停止
    // ==================================================

    for {
        time.Sleep(1 * time.Second)
    }
}