2025年11月28日金曜日

vlang docmentation(https://docs.vlang.io/introduction.html) すこしづつ改訂必要(チャット君利用)

V ではトップレベルに置けるのは:

  • 関数宣言

  • グローバル変数の宣言(__global or pub mut

  • 型宣言(struct, enum など)

  • import

です。
:= を使った代入は 必ず関数内で書く必要 があります。


module main

fn foo() (int, int) {

    return 2, 3

}


fn main() {

    a, b := foo()

    println(a) // 2

    println(b) // 3

    c,_ := foo()

    println(c) // 2

}

pico-sdk and vlang

 https://zenn.dev/nonnoise/articles/8c8997c2757cc0でwsl2/ubuntuでできた pico用がメインでpico-wはちょっとめんどげ

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

 v -cc gcc -o blink.c blink.v (-cc gccが重要)

blink.v is as below

#flag -I.~/pico/pico/pico-sdk/src/common/pico_stdlib_headers/include

#include "stdlib.h"

#include "time.h"


// ▼ C 関数の宣言(正しい型で)

fn C.stdio_init_all()

fn C.gpio_init(pin u32)

fn C.gpio_set_dir(pin u32, dir bool)

fn C.gpio_put(pin u32, value bool)

fn C.sleep_ms(ms u64)


// ▼ Pico の実行エントリ(V main は使わない)

@[no_main]

@[export: "main"]

fn main() {

    C.stdio_init_all()


    C.gpio_init(25)

    C.gpio_set_dir(25, true)

    for {

        C.gpio_put(25, true)

        C.sleep_ms(500)

        C.gpio_put(25, false)

        C.sleep_ms(500)

    }

}

できたblink.cをcmake/makeする 。。。。ここからが謎

2025年11月22日土曜日

arduino uno r4 wifi with very convenient httpserver library

UnoR4WiFi_Webserver libraryがうごいた

 /*  main.cpp
 * This example demonstrates how to create a multi-page web server with:
 * - Home page with navigation
 * - Temperature monitoring page
 * - LED control page
 *
 * Hardware: Arduino Uno R4 WiFi or DIYables STEM V4 IoT
 * Library: UnoR4WiFi_WebServer
 */

#include <UnoR4WiFi_WebServer.h>
#include "home.h"
#include "temperature.h"
#include "led.h"
#include "arduino_secrets.h"

// WiFi credentials
const char WIFI_SSID[] = SECRET_SSID;
const char WIFI_PASSWORD[] = SECRET_PASS;

// LED configuration
#define LED_PIN 13
int ledState = LOW;  // Track LED state

// Create web server instance
UnoR4WiFi_WebServer server;

// Helper function to send LED page with current status
void sendLedPage(WiFiClient& client) {
  String ledStatus = (ledState == HIGH) ? "ON" : "OFF";
  String response = LED_PAGE;
  response.replace("%LED_STATUS%", ledStatus);
  server.sendResponse(client, response.c_str());
}

// Page handlers

void handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {
  server.sendResponse(client, HOME_PAGE);
}

void handleTemperature(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {
  float tempC = 25.5;  // Simulated temperature value, you can replace with actual sensor reading
 
  String response = TEMPERATURE_PAGE;
  response.replace("%TEMP_C%", String(tempC, 1));
 
  server.sendResponse(client, response.c_str());
}

void handleLed(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {
  sendLedPage(client);
}

void handleLedOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {
  ledState = HIGH;
  digitalWrite(LED_PIN, ledState);
  sendLedPage(client);
}

void handleLedOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) {
  ledState = LOW;
  digitalWrite(LED_PIN, ledState);
  sendLedPage(client);
}

void setup() {
  Serial.begin(9600);
  delay(1000);
 
  // Initialize LED pin
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, ledState);
 
  Serial.println("Arduino Uno R4 WiFi - Multi-Page Web Server");
 
  // Connect to WiFi
  Serial.print("Connecting to ");
  Serial.println(WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  delay(1000); // ここが大変重要で入れないとconnected 0.0.0.0でdhcpdがうごかん!
  Serial.println(" connected!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
 
  // Configure routes
  server.addRoute("/", handleHome);
  server.addRoute("/temperature", handleTemperature);
  server.addRoute("/led", handleLed);
  server.addRoute("/led/on", handleLedOn);
  server.addRoute("/led/off", handleLedOff);
 
  // Start server
  server.begin();
 
  Serial.println("\n=== Web Server Ready! ===");
  Serial.print("Visit: http://");
  Serial.println(WiFi.localIP());
}

void loop() {
  server.handleClient();
}
ーーーーーーーーーーーーーhome.hーーーーーーーーーーーーーーーーーーーーーーーーーー
#ifndef HOME_H
#define HOME_H

const char HOME_PAGE[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="icon" href="data:,">
  <title>Arduino Web Server</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      text-align: center;
      margin: 50px;
      background-color: #f5f5f5;
    }
    .container {
      max-width: 600px;
      margin: 0 auto;
      background-color: white;
      padding: 30px;
      border-radius: 10px;
      box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    }
    h1 {
      color: #333;
      margin-bottom: 30px;
    }
    .nav-menu {
      list-style: none;
      padding: 0;
      margin: 0;
    }
    .nav-item {
      margin: 15px 0;
    }
    .nav-link {
      display: inline-block;
      padding: 15px 30px;
      text-decoration: none;
      background-color: #007bff;
      color: white;
      border-radius: 5px;
      font-size: 16px;
      min-width: 200px;
      transition: background-color 0.3s;
    }
    .nav-link:hover {
      background-color: #0056b3;
    }
    .description {
      margin: 30px 0;
      color: #666;
      font-size: 14px;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>Arduino Uno R4 WiFi Web Server</h1>
    <div class="description">
      <p>Welcome to the Arduino web server demo!</p>
      <p>Explore the features below:</p>
    </div>
    <ul class="nav-menu">
      <li class="nav-item">
        <a href="/temperature" class="nav-link">🌡️ Temperature Data</a>
      </li>
      <li class="nav-item">
        <a href="/led" class="nav-link">💡 LED Control</a>
      </li>
    </ul>
    <br><br><br><br>
    This works with Arduino Uno R4 WiFi and <a href="https://diyables.io/products/diyables-stem-v4-iot-fully-compatible-with-arduino-uno-r4-wifi" target="_blank">DIYables STEM V4 IoT</a>
  </div>
</body>
</html>
)rawliteral";

#endif
ーーーーーーーーーーーーーーーled.hーーーーーーーーーーーーーーーーーーーーーーー

#ifndef LED_H
#define LED_H

const char LED_PAGE[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="icon" href="data:,">
  <title>LED Control</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      text-align: center;
      margin: 50px;
    }
    .led-status {
      font-size: 24px;
      font-weight: bold;
      color: #0000ff;
    }
    .button {
      display: inline-block;
      padding: 10px 20px;
      margin: 10px;
      text-decoration: none;
      background-color: #007bff;
      color: white;
      border-radius: 5px;
      border: none;
      cursor: pointer;
    }
    .button:hover {
      background-color: #0056b3;
    }
  </style>
</head>
<body>
  <h1>LED Control Panel</h1>
  <div>LED Status: <span class="led-status">%LED_STATUS%</span></div>
  <p>Control the LED using the buttons below:</p>
  <a href="/led/on" class="button">Turn LED ON</a>
  <a href="/led/off" class="button">Turn LED OFF</a>
  <br><br>
  <a href="/">Back to Home</a>
  <br><br><br><br>
  This works with Arduino Uno R4 WiFi and <a href="https://diyables.io/products/diyables-stem-v4-iot-fully-compatible-with-arduino-uno-r4-wifi" target="_blank">DIYables STEM V4 IoT</a>
</body>
</html>
)rawliteral";

#endif
-------------------temperture.h-----------------------------
#ifndef TEMPERATURE_H
#define TEMPERATURE_H

const char TEMPERATURE_PAGE[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="icon" href="data:,">
  <title>Temperature Data</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      text-align: center;
      margin: 50px;
      background-color: #f5f5f5;
    }
    .temperature-container {
      background: white;
      padding: 30px;
      border-radius: 10px;
      box-shadow: 0 2px 10px rgba(0,0,0,0.1);
      display: inline-block;
      margin: 20px;
    }
    .temperature-value {
      font-size: 48px;
      font-weight: bold;
      color: #0066cc;
      margin: 20px 0;
    }
    .info {
      margin: 20px 0;
      font-size: 16px;
      color: #666;
    }
    .refresh-btn {
      background: #0066cc;
      color: white;
      padding: 10px 20px;
      text-decoration: none;
      border-radius: 5px;
      margin: 10px;
      display: inline-block;
    }
  </style>
</head>
<body>
  <h1>🌡️ Temperature Monitor</h1>
 
  <div class="temperature-container">
    <div class="temperature-value">%TEMP_C%°C</div>
   
    <div class="info">
      <p><strong>Status:</strong> Temperature reading</p>
      <p><em>Refresh the page to see updated values</em></p>
    </div>
   
    <a href="/temperature" class="refresh-btn">🔄 Refresh</a>
    <a href="/" class="refresh-btn">🏠 Home</a>
    <br><br><br><br>
    This works with Arduino Uno R4 WiFi and <a href="https://diyables.io/products/diyables-stem-v4-iot-fully-compatible-with-arduino-uno-r4-wifi" target="_blank">DIYables STEM V4 IoT</a>
  </div>
</body>
</html>
)rawliteral";

#endif



2025年11月19日水曜日

new Blynkはesp01(at mode)はつかえない!uno r3 + esp01-atはチャット君に聞いた

 sunfounderのチュートリアルはblynk legacyでないとあかん ふるいのをインストは危険

そうなので断念 チャット君に聞いて次のコードを得た

以下のスケッチは、Arduino UnoからESP-01へATコマンドを送信し、簡単なWebサーバーを立てるための基本的な枠組みです。YOUR_SSIDYOUR_PASSWORDを実際のWi-Fi情報に置き換えてください。
とのことだったが、AT-THINKER_E71E5Cというアクセスポイントが出てきてpwdなしだった
cpp
#include <SoftwareSerial.h>

// ESP-01のRX/TXピンをArduinoの任意のデジタルピンに接続
// ここでは D2(RX) と D3(TX) を使用する例
SoftwareSerial espSerial(2, 3); // RX, TX

void setup() {
  Serial.begin(9600);
  espSerial.begin(115200); // ESP-01のデフォルトボーレートに合わせて調整 (115200 bpsが多い)

  Serial.println("Starting ESP-01 Web Server...");

  // ATコマンドでESP-01を設定
  sendData("AT+RST\r\n", 2000); // リセット
  sendData("AT+CWMODE=2\r\n", 1000); // APモードに設定
  sendData("AT+CIFSR\r\n", 1000); // IPアドレスを取得
  sendData("AT+CIPMUX=1\r\n", 1000); // 多重接続モード有効化
  sendData("AT+CIPSERVER=1,80\r\n", 1000); // TCPサーバー開始 (ポート80)
}

void loop() {
  if (espSerial.available()) {
    if (espSerial.find("+IPD,")) { // クライアントからのデータ受信を検出
      delay(100);
      // 受信データを読み込み、HTTPレスポンスを返す処理を実装
      String data = "<h1>Hello from Arduino Uno!</h1>";
      String cmd = "AT+CIPSEND=0," + String(data.length()) + "\r\n";
      sendData(cmd, 1000);
      sendData(data, 1000);
      sendData("AT+CIPCLOSE=0\r\n", 1000); // 接続を閉じる
    }
  }
}

String sendData(String command, const int timeout) {
  String response = "";
  espSerial.print(command);
  long time = millis();
  while ((time + timeout) > millis()) {
    while (espSerial.available()) {
      char c = espSerial.read();
      response += c;
    }
  }
  Serial.print(response);
  return response;
}

2025年11月16日日曜日

platformIO 約束事 :: esp8266&esp32 webserver example

 #include <Arduino.h>は必須 terminal softはmicrosftのをextension install

関数プロトタイプは非有効 setup,loopで使用する関数は事前定義必須

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

https://iot.keicode.com/esp8266/esp8266-webserver.php がうごいた

localipに/led/on,/led/offなどをつけてbrowseするとled on offにつかえる

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

esp32には上記のライブラリがないとのことで自作してる人がいた softapなので注意

https://okiraku-camera.tokyo/blog/?p=6008

SimpleWebServer.h
----------------------------------------------------------------
// Get request のみ受け付ける マイコンなら十分です
#include <WiFi.h>
//line.indexOf(" ", 5)インデックス5以降から最初に現れるスペース(" ")の位置(インデックス)を
//検索し、その位置を返すメソッド呼び出し
//例えば、line の内容が "GET /path/to/file.html HTTP/1.1" だった場合を考えます。
//インデックス: 0123456789...
//文字列: "GET /path/to/file.html HTTP/1.1"
//line.indexOf(" ", 5); を実行すると:
//インデックス 5 は / の位置です。
//検索は /path/to/file.html HTTP/1.1 の部分から始まります。
//この範囲内で最初に見つかるスペースは、html の直後のスペースです。
//そのスペースのインデックス番号が戻り値として返されます。
//このメソッドは、文字列を解析して特定の部分を抽出する際によく利用されます。
#include <Arduino.h>
#include <WiFiServer.h>
#include <map>
using namespace std;
typedef void (*Handler_t)(void);
typedef void (*DefaultHandler_t)(String);
typedef struct {
  int status;
  const char* cpDesc;
} response_t;

const response_t responses[] = {
  {200,"200 OK"},
  {404,"404 Not Found"},
  {50, "500 Server Error"},
  {0,0}
};

class SimpleWebServer : public WiFiServer {
  IPAddress ap_addr;
  IPAddress ap_netmask;
  String ssid;
  String password;
  std::map<String, Handler_t>request_handlers; // request_handlersはmap
  DefaultHandler_t default_handler = 0;
  WiFiClient* client_connected; // connectしてきたclient

 public: // constructor ここ重要、引数の一部であるportはWiFiServerモジュールに丸投げ
 SimpleWebServer(const char* ssid,const char* password, \
 const IPAddress ap_addr, const IPAddress ap_netmask, int port = 80) \
 : WiFiServer(port) {
  this->ap_addr = ap_addr;
  this->ap_netmask = ap_netmask;
  this->ssid = ssid;
  this->password = password;
  client_connected = NULL; // 最初はだれもコネクトしていないので
 }

 void begin(){
  WiFi.softAP(ssid.c_str(),password.c_str());// 外部からの侵入口
  WiFi.softAPConfig(ap_addr,ap_addr, ap_netmask);// address is fixed
  Serial.print("SoftAp: ");
  Serial.print(WiFi.softAPIP());
  Serial.print(" ");
  Serial.print(ssid+String(" starts."));
  WiFiServer::begin(); // ここ重要、beginの仕事の大部分をWiFiServerモジュールへ丸投げ
  Serial.println("SimpleWebServer begin()");
 }

 void add_handler(String uri, Handler_t func){
  request_handlers[uri]=func;
 }

 void add_default_handler(DefaultHandler_t func){
  default_handler=func;//上と切り分けておくとdefault挙動をカスタムできる
 }

 void send_response(const char* cp) // clientへのpay?
 {
    if (client_connected)
      client_connected->print(cp);
 }

 void send_status(int status, const char* cp=NULL)
 {
   if (!client_connected)
     return;
   const response_t* p  = responses;
   while(p->status != 0){
     if (p->status == status){
       String s="HTTP/1.1"+String(status)+String(" ")+\
       String(p->cpDesc)+String("\r\n\r\n");
       const char* cpDesc = cp ? cp : p->cpDesc;
       s=s+String("<HTML><BODY>")+\
       String(cpDesc)+String("</BODY></HTML>\r\n");
       client_connected->print(s);
       return;
     }
     p++;
   } // 50,404の処理と以下で再帰で200処理?
   send_status(200);
  }

void handle_request(){
  WiFiClient client = available();
  if (!client)
    return;
  String request_line = "";
  while (client){
    client_connected = &client;
    while(client.available()){
      String line = client.readStringUntil('\r');
      line.trim();
      if (line.startsWith("GET")){ // Get onley built
        int index = line.indexOf(" ",5);
        if (index > 0)
           request_line = line.substring(4,index); // Req only?
        else
           request_line = line.substring(4); // Get only?
        request_line.trim();
        continue; // jump to while?
      }
      if (line.length()==0){ // end of request headers.
         Serial.println("request_line="+request_line);
         Handler_t f = request_handlers[request_line];
         if (!f) {
          if (default_handler)
           default_handler(request_line);
          else
           send_status(404);
         } else
            f();
         client.flush();
       }
    }
    client_connected=NULL;
    client.stop();
  }
 }
};
**************************************************************
main.cpp
-------------------------------------------------------------
#include <Arduino.h>
#include "SimpleWebServer.h"

// クライアントから/ledonをもらったら点灯し、ledoffなら消灯
// GPIO13にLEDを接続。

#define LED 13
SimpleWebServer server("ESP32AP", "password", IPAddress(192,168,4,1), IPAddress(255,255,255,0), 80);
void led_menu() {
  const char* cur = digitalRead(LED) ? "ON" : "OFF";
  String s =  "HTTP/1.1 200 OK\r\nContent-type:text/html\r\n\r\n"
              "<HTML><BODY style='font-size:48px;'>ESP32_HTTPD_LED1<br/>"
              "<br/><a href=/ledon>ON</a><br/><a href=/ledoff>OFF</a><br/><br/>"
              "Current Status = ";
  s = s + String(cur) + "</BODY></HTML>\r\n";
  server.send_response(s.c_str());
}

void led_on()
{
  digitalWrite(LED, 1);
  led_menu();
}

void led_off()
{
  digitalWrite(LED, 0);
  led_menu();
}

void led_500()
{
  server.send_status(500, "Internal Server Error");
}

void default_handler(String request_line)
{
  Serial.println("default_handler : " + request_line);  
  String s = request_line + " is not found";
  server.send_status(404, s.c_str());
}

void setup() {
  Serial.begin(9600);
  delay(10);
  Serial.println("");
  pinMode(LED, OUTPUT);
  digitalWrite(LED, 0);

  server.add_handler("/", led_menu);
  server.add_handler("/ledon", led_on);
  server.add_handler("/ledoff", led_off);
  server.add_handler("/led500", led_500);

  server.add_default_handler(default_handler);
  server.begin();
}

void loop() {
  server.handle_request();
  delay(10);
}





 

2025年11月12日水曜日

mplab x ide 6.25でuartもちいてdht22-3pin typeを5v駆動して成功した(c99)

 #include "mcc_generated_files/mcc.h"

#include <stdio.h> // neccesary to printf to uart

#include <stdlib.h>  // necessary to printf to uart

// 変数定義

uint16_t Temperature, Humidity;

char DataByte[5], Flag;

char Line1[17] = "Temp = xx.x DegC";

char Line2[17] = "Humi = xx.x %RH ";

// 関数プロト

void GetSensor(void);

/******************************

 * タイマ0割り込み処理関数

 * 2秒周期

 *****************************/

void TMR0_Process(void){

    Flag = 1;

}

// printf()出力をUARTに流す

void putch(char data)

{

    EUSART_Write(data);

}


void main(void)

{

    SYSTEM_Initialize();

    SYSTEM_Initialize();

    // タイマ0 Callback関数定義

    TMR0_SetInterruptHandler(TMR0_Process);

    // 割り込み許可        

    INTERRUPT_GlobalInterruptEnable();

    INTERRUPT_PeripheralInterruptEnable();

    /**** メインループ ******************/

    while (1)

    {

        if(Flag == 1){                      // 2秒ごと

           // LED_SetHigh();                  // 目印

            Flag = 0;

            // センサデータ取得 2項目

            GetSensor();

            Humidity = (uint16_t)DataByte[0]*256 + DataByte[1];

            Temperature = (uint16_t)DataByte[2]*256 + DataByte[3]; 

            // 文字に変換しバッファに格納

            Line1[7] = (char)(Temperature / 100) + '0';

            Temperature %= 100;

            Line1[8] = (char)(Temperature /10) + '0';

            Line1[10] = (char)(Temperature % 10) + '0';            

            Line2[7] = (char)(Humidity / 100)  + '0';

            Humidity %= 100;

            Line2[8] = (char)(Humidity / 10) + '0';

            Line2[10] = (char)(Humidity % 10) + '0'; 

            printf("temperature is %s\n",Line1);

            printf("humidity is %s\n",        Line2);

            //LED_SetLow();

        }

    }

 

   // // 確認用LED点灯(RA0などにLEDをつけている場合)

   // TRISA0 = 0; // 出力

   //  LATA0 = 1;

   //

   // printf("\r\n=== UARTテスト開始 ===\r\n");


    //while (1)

   // {

    //    printf("Hello from PIC16F18313!\r\n");

    //    __delay_ms(1000);

   // }

}


/*******************************************

 *  AM2320 Get Data 

 *   5Byte HumiH+HumiL+TempH+TempL+Check

 ********************************************/

void GetSensor(void){

    uint8_t i, j, pos;

    // Output StartPulse

    SDA_SetLow();    

    SDA_TRIS = 0;                           // 出力モード

    __delay_ms(2);                          // 2msec

    SDA_SetHigh();

    SDA_TRIS = 1;                           // 入力モード 

    __delay_us(150);                        // 最初のパルススキップ

    while(SDA_GetValue() == 1);             // Highの間待つ

    // Get 40bit data 5 byte

    for(j=0; j<5; j++){                     // 5バイト繰り返し

        DataByte[j] = 0;                    // データリセット

        pos = 0x80;                         // 最上位ビットから

        for(i=0; i<8; i++){                 // 8ビット繰り返し

            while(SDA_GetValue() == 0);     // Lowの50usec待ち

            __delay_us(40);                 // 40usecスキップ          

            if(SDA_GetValue() == 1){        // 0と1の判定

                DataByte[j] |= pos;         // 1の場合セット

                while(SDA_GetValue() == 1); // ビット終わりを待つ  

            }

            pos >>= 1;                      // 次のビットへ

         }

    }

}

2025年11月11日火曜日

mplab x ide (pic unsupporte errorの解決方法)

 Packsでpic16f...をインスト、project propertiesで以下の画像がでる

一番上のDFPパックを選んだらpic16f1778,pic16f1938,pic18seriesがコンパイル不可

よって一番下のを選んでアプライし、再起動したら動いた

--------------------------------------------simulatorの解除法はチャット君によると----------

mplab x ide 6.25 upload ボタンがグレー
MPLAB X IDE 6.25
 で「アップロード」ボタン (一般的には「
Make and Program Device」や緑色の実行ボタン) がグレー表示になる場合、いくつかの一般的な原因が考えられます。
主な原因と解決策
  1. プログラミングツール(デバッガ/ライタ)が選択されていない、または接続されていない
    • 解決策: プロジェクトプロパティで、使用するハードウェアツール (例: PICkit 4/5, ICD 4, SNAPなど) を選択し、PCに正しく接続されていることを確認してください。
    • 手順:
      1. Project Properties」を開きます (プロジェクトを右クリックして「Properties」を選択するか、メニューから「File > Project Properties」)。
      2. 左側のカテゴリから「Connected Hardware Tool」を選択します。
      3. ドロップダウンリストから、接続されている(「Connected」と表示されているはずです)適切なツールを選択します。
      4. 「Apply」または「OK」をクリックします。
  2. シミュレータが選択されている
    • 解決策: ツール設定で「シミュレータ」が選択されている場合、物理的なデバイスへの書き込みはできないため、ボタンはグレー表示になります。上記の手順で物理的なハードウェアツールに変更してください。
  3. プロジェクト構成ファイル (nbprojectフォルダなど) の破損
    • 解決策: まれに、プロジェクト設定ファイルが破損することがあります。
    • 手順:
      1. 新しいスタンドアロンプロジェクトを作成します。
      2. 古いプロジェクトのソースファイル (.c, .h ファイルなど) を新しいプロジェクトにコピー&ペーストして、正常に動作するか確認します。
  4. コンパイラツールチェーンが正しく設定されていない
    • 解決策: プロジェクトプロパティの「Compiler Toolchain」セクションで、適切なコンパイラバージョン (XC8, XC16, XC32など) が選択されていることを確認してください。コンパイラがグレー表示されている場合は、IDEのTools > Options > Embedded > Build Toolsでスキャンし直してください。
  5. MPLAB X IDE のバグや一時的な不具合
    • 解決策: IDEを再起動する、または「Project Properties」ウィンドウで一旦別のデバイスに変更してから元のデバイスに戻すといった回避策が有効な場合があります。 
これらの手順を試すことで、問題が解決する可能性が高いです。特に、プログラミングツールの選択シミュレータ設定を確認してみてください。