2024年12月21日土曜日

PICとESP01でアクセスポイント(simple and complex)

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

 *  ESPをAPでサーバにする

 *    ESP_Server  :: LCDつないでないときは動きがバグるので全部コメントアウトした

*       電源いれたらスマホのwifiをAT_THINKER????につないでtcp/udp test toolを起動

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

#include "mcc_generated_files/mcc.h"

#include "i2c_lib2.h"

#include "lcd_lib2.h"

uint8_t StMsg[] = "Start Wi-Fi Test";

uint8_t Buffer[128], i, rcv;

/* 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,9000\r\n";

const uint8_t Send[] = "AT+CIPSEND=0,10\r\n";

const uint8_t Data[] = "AAAAAAAA\r\n";

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

void SendCmd(const uint8_t *cmd);

void Receive(uint8_t *buf);

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

void main(void)

{

    SYSTEM_Initialize();            // 初期化

    INTERRUPT_GlobalInterruptEnable();// 割込み許可

    INTERRUPT_PeripheralInterruptEnable();

    //lcd_init();                     // LCD初期化

    //lcd_clear();                    // LCD全消去

    //lcd_str(StMsg);                 // 初期メッセージ

     __delay_ms(5000);    // decomment above 3 lines add this line by me

    SendCmd(Mode);                  // ソフトAPモード

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

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

    

    while (1)

    {

        if(EUSART_is_rx_ready() != 0){// 受信あり

            Receive(Buffer);       // \nまで受信

            //lcd_cmd(0x80);         // LCD1行目指定

            //for(i=0; i<32; i++){   // 32文字出力

            //    lcd_data(Buffer[i]);// 1文字表示出力

            //    if(i == 15)        // 16文字目か

            //        lcd_cmd(0xC0); // LCD2行目指定

            //}

            SendCmd(Send);         // 送信

            SendCmd(Buffer);        // 10文字(12345678+\r+\nをおくってみた)

        }

        //if(S1_GetValue() == 0){    // S1オンの場合

            SendCmd(Send);         // 送信

            SendCmd(Data);         // AAAAAの送信

        //}

         __delay_ms(5000); 

    }

}

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

 * WiFiコマンド送信関数

 *  遅延挿入後戻る

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

void SendCmd(const uint8_t *cmd){

    while(*cmd != 0)            // 0まで繰り返し

        EUSART_Write(*cmd++);   // 1バイト送信

    __delay_ms(1000);           // 1秒待ち

}

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

 *  WiFI受信関数 割り込み処理で受信

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

void Receive(uint8_t *buf){

    uint8_t rcv, cnt;


    cnt = 0;                    // カウンタリセット

    while(rcv != '\n'){         // \nまで繰り返し

        if(EUSART_is_rx_ready() != 0){// 受信あり

            rcv = EUSART_Read();// データ取り出し

            if((rcv != '\n')&&(rcv != '\r')){

                *buf = rcv;     // バッファに文字保存

                buf++;          // ポインタ更新

                cnt++;          // カウンタ更新

            }

        }

    }

    while(cnt < 32){        // 32文字まで

        *buf = 0x20;        // スペース追加

        cnt++;              // カウンタ更新

        buf++;              // ポインタ更新

    }       

}

--------------simple -------------------------------------------------------

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

 *  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);

}

https://analogicintelligence.blogspot.com/2019/09/wroom-02atweb-server.html 

これはさらにWebserverをつくっているが。。。。

0 件のコメント:

コメントを投稿