https://toccho.net/2022/07/26/neo6mv2-arduino/ :: 中華GPS
https://github.com/mikalhart/TinyGPSPlus/tree/master 上記ライブラリ
https://note.com/clever_elk255/n/nfd33282af18b :: 参考
--------------------------
逆引きの162頁 mccのgetchとstdioのgetchがtype conflictしたのでmccをstdioに合わせて成功 TX,RXはpin-manager.cをみて了解した
/*****************************************
* 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"; // Station Mode
const uint8_t Join[] = "AT+CWJAP=\"184F32CF8BF3-2G\",\"??????\"\r\n";
const uint8_t Open[] = "AT+CIPSTART=\"TCP\",\"192.168.3.20\",8000\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とサーバに接続 ***/
SendCmd(Mode); // Station Mode
SendCmd(Join); // APと接続
__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; // 電圧に変換 システムを5vで駆動するときは5.0 !
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; //次の桁へ
}
}
まず以下のpythonコードでサーバをたちあげておく
#simple echo server
from os import terminal_size
import socket
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("192.168.3.20",8000))
server_socket.listen(1)
client_socket,client_address = server_socket.accept()
print("Connection from",client_address)
while True:
data = client_socket.recv(1024)
str_data = data.decode()
if not data : break
print("Received from client",str_data)
# client_socket.send(data) # echo back function disabled by me
#client_address.close()
client_socket.close()
--------------------echo enable :: client.py-------------------------------------------
#client
import socket
client_socket = socket.socket()
client_socket.connect(("192.168.3.20",8000))
while True:
data = input(">")
client_socket.send(data.encode())
if not data:break
newData = client_socket.recv(1024)
print("Received from server:" ,str(newData.decode()))
client_socket.close()