2024年12月21日土曜日

PICとESP01でアクセスポイント

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

 *  ESPをアクセスポイントにする

 *    ESP_AP 簡単dhcp機能つき 端末は192.168.4.1固定

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

#include "mcc_generated_files/mcc.h"

/* WiFi設定用コマンドデータ */

const uint8_t Mode[] = "AT+CWMODE=2\r\n";

const uint8_t Mult[] = "AT+CIPMUX=1\r\n";

const uint8_t Serv[] = "AT+CIPSERVER=1\r\n";

/* 関数プロトタイプ */

void SendCmd(const uint8_t *cmd);

/******* メイン関数 *****************/

void main(void)

{

    SYSTEM_Initialize();

    __delay_ms(5000);

    __delay_ms(5000);

    SendCmd(Mode);  // APモード

    SendCmd(Mult);  // マルチ接続モード

    SendCmd(Serv);  // サーバモード

    while (1)

    {   }

}

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

 * WiFiコマンド送信関数

 *  遅延挿入後戻る

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

void SendCmd(const uint8_t *cmd){

    while(*cmd != 0)

        EUSART_Write(*cmd++);

    __delay_ms(1000);

}

2024年12月18日水曜日

2024年12月16日月曜日

esp32/8266なんとかsoftAp-fixedAdressでオンオフサーバに成功

 


// https://garretlab.web.fc2.com/arduino/esp32/examples/WiFi/SimpleWiFiServer.html 

// updated by me

#include <WiFi.h> // wifi lib of arduino1.5ide

#define WIFI_SSID "ESP32-softAP" 

#define WIFI_PWD "12345678"    

WiFiServer server(80);       

IPAddress ip( 192, 168, 0, 111 );    

IPAddress subnet( 255, 255, 255, 0 ); 


void setup() {

  pinMode(5, OUTPUT);

  digitalWrite(5,HIGH);

  delay(1000);

  digitalWrite(5,LOW);

  

  WiFi.mode(WIFI_AP);

  WiFi.softAP(WIFI_SSID, WIFI_PWD);

  delay(100);

  WiFi.softAPConfig(ip, ip, subnet);

  delay(100);

  server.begin();

}


int value = 0;


void loop(){

  WiFiClient client = server.available();   // listen for incoming clients


  if (client) {                             // if you get a client,

    Serial.println("New Client.");           // print a message out the serial port

    String currentLine = "";                // make a String to hold incoming data from the client

    while (client.connected()) {            // loop while the client's connected

      if (client.available()) {             // if there's bytes to read from the client,

        char c = client.read();             // read a byte, then

        Serial.write(c);                    // print it out the serial monitor

        if (c == '\n') {                    // if the byte is a newline character


          // if the current line is blank, you got two newline characters in a row.

          // that's the end of the client HTTP request, so send a response:

          if (currentLine.length() == 0) {

            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)

            // and a content-type so the client knows what's coming, then a blank line:

            client.println("HTTP/1.1 200 OK");

            client.println("Content-type:text/html");

            client.println();


            // the content of the HTTP response follows the header:

            client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 5 on.<br>");

            client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 5 off.<br>");


            // The HTTP response ends with another blank line:

            client.println();

            // break out of the while loop:

            break;

          } else {    // if you got a newline, then clear currentLine:

            currentLine = "";

          }

        } else if (c != '\r') {  // if you got anything else but a carriage return character,

          currentLine += c;      // add it to the end of the currentLine

        }


        // Check to see if the client request was "GET /H" or "GET /L":

        if (currentLine.endsWith("GET /H")) {

          digitalWrite(5, HIGH);               // GET /H turns the LED on

        }

        if (currentLine.endsWith("GET /L")) {

          digitalWrite(5, LOW);                // GET /L turns the LED off

        }

      }

    }

    // close the connection:

    client.stop();

    Serial.println("Client Disconnected.");

  }

}

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

// https://cotechworks.ltt.jp/2023/06/05/post-668/ を改変

#include <ESP8266WiFi.h>

#include <ESP8266WebServer.h>

#define WIFI_SSID "ESP8266-softAP"    /* SSID */

#define WIFI_PWD "12345678"           /* パスワード */

ESP8266WebServer server(80);

IPAddress ip( 192, 168, 0, 1 );         /* ESP8266のIPアドレス */

IPAddress subnet( 255, 255, 255, 0 );   /* サブネットマスク */

void setup() {

  /* softAPモードに設定 */

  pinMode(0,OUTPUT);

  WiFi.mode(WIFI_AP);

  WiFi.softAPConfig(ip, ip, subnet);

  WiFi.softAP(WIFI_SSID, WIFI_PWD);


  server.on("/", []() {

    server.send(

      200,

      "text/html",    

      "<h1>Hello! Web Server!</h1>"

      "Click <a href=\"/H\">here</a>");

  });

  server.on("/H", []() {

    digitalWrite(0,HIGH);

    delay(500);

    digitalWrite(0,LOW);

    server.send(

      200,

      "text/html",    

      "<h1>Hello! Web Server!</h1>"

      "Click <a href=\"/H\">here</a>");

  });

  // 上記やや冗長だがわかりやすい

  server.begin();

}

void loop() {

  /* クライアントからアクセスがあった時の処理 */

  server.handleClient();

}

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

https://iot.keicode.com/esp8266/esp8266-webserver.php を参考に冗長解決

#include <ESP8266WiFi.h>

#include <ESP8266WebServer.h>

#define WIFI_SSID "ESP8266-softAP"    /* SSID */

#define WIFI_PWD "12345678"           /* パスワード */

ESP8266WebServer server(80);

IPAddress ip( 192, 168, 0, 1 );         /* ESP8266のIPアドレス */

IPAddress subnet( 255, 255, 255, 0 );   /* サブネットマスク */


// HTML

#define HTML_HEADER "<!doctype html>"\

  "<html><head><meta charset=\"UTF-8\"/>"\

  "<meta name=\"viewport\" content=\"width=device-width\"/>"\

  "</head><body>"

#define HTML_FOOTER "</body></html>"

const String html = HTML_HEADER "<h1>Hello! Web Server!</h1>" "Click <a href=\"/H\">here</a>" HTML_FOOTER; // この位置でないとおかしくなる。。。

void setup() {

  /* softAPモードに設定 */

  pinMode(0,OUTPUT);

  WiFi.mode(WIFI_AP);

  WiFi.softAPConfig(ip, ip, subnet);

  WiFi.softAP(WIFI_SSID, WIFI_PWD);

  /* ルートにアクセスされた時の処理の設定 */

   

  server.on("/", []() {

      

    server.send(

      200,

      "text/html",    

     html);

  });

  server.on("/H", []() {

    digitalWrite(0,HIGH);

    delay(500);

    digitalWrite(0,LOW);


    server.send(

      200,

      "text/html",    

      html);

  });

  

  /* Webサーバーの起動 */

  server.begin();

}

void loop() {

  /* クライアントからアクセスがあった時の処理 */

  server.handleClient();

}

2024年11月25日月曜日

memo / aki-esp01 and pic / mcc /esp01(3v) and picocom / esp01(5v) and pico

https://qiita.com/sukinasaki/items/426068d6e87169fa3d88 ;; raspi keyboard japanize

https://qiita.com/kummn/items/411d6a501eaf61162e8f ;; ATコマンド集

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

2階の電波強度が悪い::アンドロイドアプリのwifiミレルで2階の2G強度を測定すると
30〜40%と黄色信号となります、あかーん

秋月のesp8266は工場出荷時にATモードです 電源コードはuartを兼ねており通信傍受OK
逆引き本wifi-pc.x、わかりやすいのトライくりかえしました
AT+CWJAPで謎のエラー頻発 携帯のテザリングで成功しました 
アンドロイドアプリのtcp udp server clientというので10回まではポテンショ値が読み取れ
11回目からはエラーとなりだす問題多いコードですが後閑さんのご愛嬌?
副産物としてlinuxソフトのpicocomで通信傍受できるようになりました
picocom -b 115200 --omap crcrlf /dev/ttyUSB0 (その後--omap crcrlf不要と判明)
ちなみにttyUSB0lはs /dev/tty*でを探しました
esp01(3v) 、esp01(5v)でも成功しました(傍受方法は下記にしるず)
これらはPICを3v・5v駆動いずれでも成功しました
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

逆引きの162頁 esp01からのレスを無視する問題多いコード

まずhighly recommend にしたがいmcc versionを上げた 

esuart はstdio redirect にチェックがはいっていた そのためであろうか

mccのgetchとstdioのgetchがtype conflictしたのでpropertyでc90を適用実施、

しかし、下記のコードではprintfつかってないので、上記のチェックをはずしても動いた

C99にプロパティ変えても動いた 後閑さんの混乱?多分

TX,RXはpin-manager.cをみて了解した pin18:rx,pin17:txだった

傍受にはFTDIのrxをpin18,txをpin17につけると傍受できる!

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

 *  Wi-Fi テストプログラム

 *  Wi-FiPC

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

#include "mcc_generated_files/mcc.h"

/* 送信データ */

uint8_t Buf[] = "POT = x.xx Volt\r\n";

int result, i;

float Volt;

/* WiFi設定用コマンドデータ */

const uint8_t Mode[] = "AT+CWMODE=1\r\n";

//const uint8_t Join[] = "AT+CWJAP=\"Bufflalo-2G-8340\",\"636nsa535ds3v\"\r\n";

const uint8_t Join[] = "AT+CWJAP=\"HUAWEI@nova@lite@3+\",\"99991111\"\r\n";

//const uint8_t Open[] = "AT+CIPSTART=\"TCP\",\"192.168.11.8\",8000\r\n";

const uint8_t Open[] = "AT+CIPSTART=\"TCP\",\"192.168.43.1\",8080\r\n";

const uint8_t Send[] = "AT+CIPSEND=17\r\n";       // 転送開始

const uint8_t Close[] = "AT+CIPCLOSE\r\n";        // サーバ接続解除

const uint8_t Shut[]  = "AT+CWQAP\r\n";           // Ap接続解除

/* 関数プロトタイプ */

void SendCmd(const uint8_t *cmd);

void ftostring(int seisu, int shousu, float data, uint8_t *buffer);

/***** メイン関数 *****/

void main(void)

{

    SYSTEM_Initialize();    // システム初期化

    /** APとサーバに接続  15秒ディレイを多めにした***/

    __delay_ms(5000);  

    __delay_ms(5000); 

    __delay_ms(5000);  

    SendCmd(Mode);          // Station Mode

    __delay_ms(5000);       // 5sec待ち

   __delay_ms(5000);       // 5sec待ち

  __delay_ms(5000);       // 5sec待ち

    SendCmd(Join);          

    __delay_ms(5000);       // 5sec待ち

    __delay_ms(5000);       // 5sec待ち

   __delay_ms(5000);       // 5sec待ち

    SendCmd(Open);          // サーバ(PC)と接続

    __delay_ms(2000);       // 2sec待ち    

    while (1)

    {

        /*** データ10回送信 ****/

        for(i=0; i<10; i++){

            LED_SetHigh();                  // 目印ON

            result = ADC_GetConversion(POT);// AD変換

            Volt = (result * 3.3) / 1023;   // 電圧に変換

            ftostring(1, 2, Volt, Buf+6);   // 文字列に変換

            /** Wi-Fi送信開始 ***/


            SendCmd(Send);          // 文字送信開始

            SendCmd(Buf);           // データ送信実行


            LED_SetLow();           // 目印オフ

            __delay_ms(3000);       // 繰り返し3秒待ち

        }

        /*** APとサーバから切り離し ****/

        SendCmd(Close);             // サーバ接続解除

        SendCmd(Shut);              // AP接続解除        

    }

}

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

 * WiFiコマンド送信関数

 *  遅延挿入後戻る

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

void SendCmd(const uint8_t *cmd)

{

    while(*cmd != 0)            // 文字列の終わりまで繰り返し

        EUSART_Write(*cmd++);   // 1文字送信し次の文字へ

    __delay_ms(1000);           // 1秒待ち 応答受信無視

}

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

* Floatから文字列へ変換

* 合計有効桁は8桁以下とすること

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

void ftostring(int seisu, int shousu, float data, uint8_t *buffer)

{

    int i;

    long dumy;


    if(shousu != 0)                         //小数部桁ありか

        buffer += seisu+shousu+1;           //全体桁数+小数点

    else                                    //小数部桁なしのとき

        buffer += seisu + shousu;           //全体桁数のみ

    buffer--;                               //配列ポインタ-1

    for(i=0; i<shousu; i++)                 //小数部を整数に変換

        data = data * 10;                   //10倍

    // dumyがオーバーフローすると変換不可(8桁が限界)

    dumy = (long) (data + 0.5);             //四捨五入して整数に変換

    for(i=shousu; i>0; i--) {           //小数桁数分繰り返し

        *buffer =(uint8_t)(dumy % 10)+'0';//数値を文字に変換格納

        buffer--;                           //格納場所下位から上位へ

        dumy /= 10;                         //次の桁へ

    }

    if(shousu != 0) {                       //小数桁0なら小数点なし

        *buffer = '.';                      //小数点を格納

        buffer--;                           //ポインタ-1

    }

    for(i=seisu; i>0; i--) {                //整数桁分繰り返し

        *buffer = (uint8_t)(dumy % 10)+'0';//数値を文字に変換格納

        buffer--;                           //ポインタ-1

        dumy /= 10;                         //次の桁へ

    }

}


2024年11月13日水曜日

linux terminal soft 2 (esp32)

以下のコードでラズパイ成功(多分ウブンツでもOK)

esp32にコード書き込みは/dev/ttyUSB0固定(デフォルトtxrxとおなじ)

以下のコードでは/dev/ttyUSB1がシリアル1になるとして

アルディーノターミナル(/dev/ttyUSB0) はシリアル0

picocom -b 115200 /dev/ttyUSB1 はシリアル1

これでアルディーノターミナルにaをいれるとpicocomにaが表示され

picocomにbをいれるとアルディーノターミナルにbがでた!

(picocomのlocal echoはトグルになっておりC-a,C-hで検索してオンオフ設定できる)


 // picalittle.tech/esp32-devkit_uart_test の2番めのコード

HardwareSerial mySerial(0);

HardwareSerial mySerial1(1);

void setup()

{

  mySerial.begin(115200);

  mySerial1.begin(115200,SERIAL_8N1,32,33);// rx=32,tx=33

}


void loop()

{

  while (mySerial.available())

  {

    String incomingStream = mySerial.readStringUntil('\n');

    mySerial1.println(incomingStream);

  }

  while (mySerial1.available())

  {

    String incomingStream = mySerial1.readStringUntil('\n');

    mySerial.println(incomingStream);

  }

}

2024年10月7日月曜日

ESP32/8266 soft ap あれこれ

 https://k-kuro.hatenadiary.jp/entry/20221104/1667489897で秋月電子の互換品がつかえる

UBSシリアル通信書き込みは実装されていないので、外部のFT23RL(CHINA)でTX,RXをクロス

https://garretlab.web.fc2.com/arduino/esp32/examples/WiFi/SimpleWiFiServer.html

これをAP固定IP仕様にすれば無線操縦できそう

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

aki-esp32 ブートを押したままでリセットを押し下げてリリースで書き込みモードになる

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

cf  https://iot.keicode.com/esp8266/esp8266-ap.php#google_vignette 

https://cotechworks.ltt.jp/2023/06/05/post-668/ :: esp32 ap 

wifiミレルで調べるとwifi強度100%だが身体が間にあると60%までさがる

#include <WiFi.h>
#include <WebServer.h>
#define WIFI_SSID "ESP32-softAP" /* SSID */
#define WIFI_PWD "12345678" /* パスワード */
WebServer server(80); /* ポート80で宣言 */
IPAddress ip( 192, 168, 0, 1 ); /* ESP32のIPアドレス */
IPAddress subnet( 255, 255, 255, 0 ); /* サブネットマスク */
void setup() {
/* softAPモードに設定 */
WiFi.mode(WIFI_AP);
WiFi.softAP(WIFI_SSID, WIFI_PWD);
delay(100);
WiFi.softAPConfig(ip, ip, subnet);
/* ルートにアクセスされた時の処理の設定 */
server.on("/", []() {
server.send(
200,
"text/html",
"<h1>Hello! Web Server!</h1>");
});
/* Webサーバーの起動 */
server.begin();
}
void loop() {
/* クライアントからアクセスがあった時の処理 */
server.handleClient();
}

2024年9月29日日曜日

池澤の世界文学全集

1-01「オン・ザ・ロード」ジャック・ケルアック 青山南訳

1-02「楽園への道」マリオ・バルガス=リョサ 田村さと子訳!

1-03「存在の耐えられない軽さ」ミラン・クンデラ 西永良成訳 @

1-04「太平洋の防波堤?/愛人 ラマン/悲しみよ こんにちは」マルグリット・デュラス 田中倫郎・清水徹訳/フランソワーズ・サガン 朝吹登水子訳@

1-05「巨匠とマルガリータ」ミハイル・ブルガーコフ 水野忠夫訳@

1-06「暗夜?/戦争の悲しみ」残雪 近藤直子訳/バオ・ニン 井川一久訳@

1-07「ハワーズ・エンド」E・M・フォースター 吉田健一訳but悪訳にて別人で!

1-08「アフリカの日々/やし酒飲み」イサク・ディネセン 横山貞子訳/エイモス・チュツオーラ 土屋哲訳 前者は映画でみた@

1-09「アブサロム、アブサロム! 」ウィリアム・フォークナー 篠田一士訳@

1-10「アデン、アラビア/名誉の戦場」ポール・ニザン 小野正嗣訳/ジャン・ルオー 北代美和子訳

1-11「鉄の時代」J・M・クッツェー くぼたのぞみ訳!

1-12「アルトゥーロの島/モンテ・フェルモの丘の家 」エルサ・モランテ 中山エツコ訳/ナタリア・ギンズブルグ 須賀敦子訳

2-01「灯台へ/サルガッソーの広い海」ヴァージニア・ウルフ 鴻巣友季子訳/ジーン・リース 小沢瑞穂訳 ジェインエアの狂女の前半生!

2-02「失踪者/カッサンドラ」フランツ・カフカ 池内紀訳/クリスタ・ヴォルフ 中込啓子訳 前者は2度ほど挫折@

2-03「マイトレイ/軽蔑」ミルチャ・エリアーデ 住谷春也訳/アルべルト・モラヴィア 大久保昭男訳

2-04「アメリカの鳥 」メアリー・マッカーシー 中野恵津子訳

2-05「クーデタ」ジョン・アップダイク 池澤夏樹訳

2-06「庭、灰?/見えない都市」ダニロ・キシュ 山崎佳代子訳/イタロ・カルヴィーノ 米川良夫訳@

2-07「精霊たちの家」 イサベル・アジェンデ 木村榮一訳@

2-08「パタゴニア?/老いぼれグリンゴ」ブルース・チャトウィン 芹沢真理子訳/カルロス・フエンテス 安藤哲行訳@

2-09「フライデーあるいは太平洋の冥界/黄金探索者」ミシェル・トゥルニエ 榊原晃三訳/J・M・G・ル・クレジオ 中地義和訳

2-10「賜物」ウラジーミル・ナボコフ 沼野充義訳!

2-11「ヴァインランド」トマス・ピンチョン 佐藤良明訳!

2-12「ブリキの太鼓 」ギュンター・グラス 池内紀訳@

3-01「わたしは英国王に給仕した」ボフミル・フラバル 阿部賢一訳

3-02「黒檀」リシャルト・カプシチンスキ 工藤幸雄/阿部優子/武井摩利訳

3-03「ロード・ジム」ジョゼフ・コンラッド 柴田元幸訳

3-04「苦海浄土」石牟礼道子@

3-05「短篇コレクション Ⅰ」コルタサル他

3-06「短篇コレクション Ⅱ」A・グリーン/G・トマージ・ディ・ランペドゥーサ他