2026年8月14日金曜日

platformIO esp8266 led-control-server

ini are as follows, and the code is as follows:

[env:d1_wroom_02]
platform = espressif8266
board = d1_wroom_02
framework = arduino
monitor_speed = 115200

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

#define WIFI_SSID "Pikara2-91d8e4"
#define WIFI_PWD ""

#define LED_PIN 16 // GPIO16 (D0)

ESP8266WebServer server(80);
// HTML fetchでget reqできた
const char HTML[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>LED Control</title>
<script>
function ledOn() {
fetch("/led/on");
}

function ledOff() {
fetch("/led/off");
}
</script>
</head>
<body>
<h1>NodeMCU LED Control</h1>
<button onclick="ledOn()">LED ON</button>
<button onclick="ledOff()">LED OFF</button>
</body>
</html>
)rawliteral";


// GET /led/on
void handleLedOn()
{
digitalWrite(LED_PIN, HIGH);
Serial.println("GET /led/on");
server.send(200, "text/plain", "LED ON");
}


// GET /led/off
void handleLedOff()
{
digitalWrite(LED_PIN, LOW);
Serial.println("GET /led/off");
server.send(200, "text/plain", "LED OFF");
}


// GET /
void handleRoot()
{
server.send_P(200, "text/html", HTML);
}


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

pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // 最初はオフで

// WiFi接続
WiFi.begin(WIFI_SSID, WIFI_PWD);

Serial.print("WiFi connecting");

while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}

Serial.println();
Serial.println("Connected!");

Serial.print("IP Address: ");
Serial.println(WiFi.localIP());

// URL登録
server.on("/", HTTP_GET, handleRoot);
server.on("/led/on", HTTP_GET, handleLedOn);
server.on("/led/off", HTTP_GET, handleLedOff);

server.begin();

Serial.println("Web server started");
}


void loop()
{
server.handleClient();
}


2026年8月13日木曜日

mmbasic 操作一覧 cd pico-sdk / examples

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

ctl-a,ctl-xで終了


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 "filename.bas"

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

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"

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

https://zenn.dev/askua/articles/05e143091c150c :: tinygo for pico

 https://gihyo.jp/admin/serial/01/ubuntu-recipe/0684 :: pico-sdk and pico-sdk-examples


2026年8月10日月曜日

Arduino UnoでSPI通信 温度センサADT7310

https://independence-sys.net/main/?p=3804 より参照
Arduino Unoとは以下のように接続します。
ADT7310 – Arduino 3.3vでもうごくのでラズピコでもOK
CS – Pin10 SS(CS)     chip select マイナス論理
SDI – Pin11 MOSI      sdi:   serial data in
SDO – Pin12 MISO sdo: serial data out
SCL – Pin13 SCK        scl:   serial clock line
VDD – 5V
GND – GND
Arduino UnoのMISO(Master In Slave Out)端子は、SPI通信でセンサー(スレーブ)からデータを受け取る(読み込む)ための入力端子 MOSIはMaster Out Slave Inの略で、
Arduino(マスター)からセンサや周辺機器(スレーブ)へデータを送信(出力)するための端子です。つまりtx,rxのようなクロス結合となっている。I2CはDaisy Chainで全然ちがう。

#include <SPI.h>
 
/*
 * ADT7310での温度データ取得
 * ADT7310 - Arduino
 *  CS  - Pin10 SS(CS)
 *  SDI - Pin11 MOSI
 *  SDO - Pin12 MISO
 *  SCL - Pin13 SCK
 *  VDD - 5V
 *  GND - GND
 */
 
int SSPin = 10; // Pin10をSS
  
// 初期化
void setup(void) {
  pinMode(SSPin, OUTPUT);
  Serial.begin(9600);
  // 以下の3行は呪文やな
  SPI.setBitOrder(MSBFIRST);  //最上位ビット(MSB)から送信
  SPI.setClockDivider(SPI_CLOCK_DIV128); //通信速度を遅く設定
  SPI.setDataMode(SPI_MODE0); //CPOL(クロック極性):0 CPHA(クロックフェーズ):0
 
  SPI.begin();
  
  SetSSPin(LOW); // マイナス論理、0の間だけ通信可能となる
// 本プログラムではループしつづけるのでSetSSPin(High)は不要
 
  //ソフトウェアリセット
  SPI.transfer(0xFF);
  SPI.transfer(0xFF);
  SPI.transfer(0xFF);
  SPI.transfer(0xFF);
     
  SPI.transfer(0x54);    // 測定開始(continuously read)
  delay(500);            // 仕様上は、240msで開始
}
  
// メインループ
void loop(void) {
  uint16_t uiVal;
  float fVal;
  int iVal;
  
  uiVal = (uint16_t)SPI.transfer(0) << 8;  // AD変換値 上位
  uiVal |= SPI.transfer(0);                // AD変換値 下位
 
  uiVal >>= 3;                          // シフトで13bit化  
  //uiVal = 0x1fff; //確認テスト用
  
  if(uiVal & 0x1000) {               // 13ビットで符号判定
    iVal = uiVal - 0x2000;         // マイナスの時 (10進数で8192)
  }
  else{
    iVal = uiVal;                 //プラスの時
  }
   
  fVal = (float)iVal / 16.0;           // 温度換算(摂氏)
  Serial.println(fVal, 4);             // シリアル送信
   
  delay(5000);          //例として5秒待つ
}
 
/*
 * SSピンの設定
 * Lowでマスタからの通信が有効(セレクト)
 * (Highではマスタから通信出来ない(無視される)セレクト解除の状態)
 */
void SetSSPin(int val)
{
    digitalWrite(SSPin, val);
}