- 始める前に覚えておくべきこと
- 必要なコンポーネント
- 回路図
- 電子メールを送信するためのSMTP2GOサーバーの設定
- AVRマイクロコントローラーAtmega16およびESP8266のプログラミング
- 電子メールを送信するためのATmega16のプログラミング
- ESP8266NodeMCUのプログラミング
Atmega16は低コストの8ビットマイクロコントローラーであり、以前のバージョンのマイクロコントローラーよりも多くのGPIOが付属しています。UART、USART、SPI、I2Cなどの一般的に使用されるすべての通信プロトコルがあります。幅広いコミュニティサポートとシンプルさにより、ロボット工学、自動車、自動化業界で幅広い用途があります。
Atmega16は、 IoTなどのドメイン内のアプリケーション領域を制限するWi-FiやBluetoothなどのワイヤレス通信プロトコルをサポートしていません。この制限を克服するために、ワイヤレスプロトコルを備えた他のコントローラーをインターフェースすることができます。広く使用されているESP8266のようなワイヤレスプロトコルをサポートするコントローラーは多数あります。
今日は、Atmega16をESP8266 NodeMCUとインターフェースし て、インターネットを介してワイヤレスで通信できるようにします。ESP8266 NodeMCUは、コミュニティサポートと簡単に利用できるライブラリを備えた広く使用されているWiFiモジュールです。また、ESP8266NodeMCUはArduinoIDEで簡単にプログラムできます。ESP8266は、任意のマイクロコントローラーとインターフェースできます。
このチュートリアルでは、ESP8266NodeMCUモジュールとAtmega16を使用して電子メールを送信します。指示はAtmega16によって提供され、ESP8266が指示を受信すると、選択した電子メール受信者に電子メールを送信します。ATmega16およびESP8266NodeMCUはUARTシリアル通信を介して通信します。ただし、SPI、I2C、UARTなど、ATmega16とESP8266NodeMCUのインターフェイスには任意の通信プロトコルを使用できます。
始める前に覚えておくべきこと
このプロジェクトで使用されているAtmega16マイクロコントローラーは5Vロジックレベルで動作しますが、ESP8266NodeMCUは3.3Vロジックレベルで動作することに注意してください。両方のマイクロコントローラーのロジックレベルが異なるため、Atmega16とESP8266 NodeMCUの間で通信障害が発生したり、適切なロジックレベルが維持されていないとデータが失われたりする可能性があります。
ただし、両方のマイクロコントローラーのデータシートを調べたところ、ESP8266 NodeMCUのすべてのピンは最大6Vの電圧レベルに耐えられるため、ロジックレベルをシフトせずにインターフェイスできることがわかりました。したがって、5Vロジックレベルで進めても問題ありません。また、Atmega16のデータシートには、2Vを超える電圧レベルはロジックレベル「1」と見なされ、ESP8266NodeMCUは3.3Vで動作することが明記されています。つまり、ESP8266 NodeMCUが3.3Vを送信している場合、Atmega16はそれをロジックレベル「1」と見なすことができます。そのため、ロジックレベルシフトを使用せずに通信が可能になります。5から3.3Vまでのロジックレベルシフターを自由に使用できますが。
ここですべてのESP8266関連プロジェクトを確認してください。
必要なコンポーネント
- ESP8266NodeMCUモジュール
- Atmega16マイクロコントローラーIC
- 16Mhz水晶発振器
- 2つの100nFコンデンサ
- 2つの22pFコンデンサ
- ボタンを押す
- ジャンパー線
- ブレッドボード
- USBASP v2.0
- Led(任意の色)
回路図
電子メールを送信するためのSMTP2GOサーバーの設定
プログラミングを開始する前に、ESP8266を介してメールを送信するためのSMTPサーバーが必要です。オンラインで利用できるSMTPサーバーはたくさんあります。ここでは、smtp2go.comがSMTPサーバーとして使用されます。
したがって、コードを記述する前に、SMTPユーザー名とパスワードが必要になります。これらの2つの資格情報を取得するには、以下の手順に従って、電子メールを正常に送信するためのSMTPサーバーの設定について説明します。
ステップ1:-「SMTP2GOを無料で試す」をクリックして、無料のアカウントに登録します。
ステップ2:-ウィンドウがポップアップします。ここで、名前、電子メールID、パスワードなどの資格情報を入力する必要があります。
ステップ3:-サインアップ後、入力した電子メールでアクティベーション要求を受け取ります。メールの確認リンクからアカウントをアクティブにしてから、メールIDとパスワードを使用してログインします。
ステップ4:-ログインすると、SMTPユーザー名とSMTPパスワードを取得します。これらを覚えておくか、メモ帳にコピーしてさらに使用してください。この後、「終了」をクリックします。
ステップ5:-左側のアクセスバーで、[設定]、[ユーザー]の順にクリックします。ここでは、SMTPサーバーとポート番号に関する情報を確認できます。通常は次のとおりです。
ユーザー名とパスワードをエンコードする
次に、ASCII文字セットを使用してbase64エンコード形式でユーザー名とパスワードを変更する必要があります。電子メールとパスワードをbase64エンコード形式に変換するには、BASE64ENCODE(https://www.base64encode.org/)というWebサイトを使用します。さらに使用するために、エンコードされたユーザー名とパスワードをコピーします。
これらの手順を完了したら、ESP8266NodeMCUおよびAtmega16ICのプログラミングに進みます。
AVRマイクロコントローラーAtmega16およびESP8266のプログラミング
プログラミングには2つのプログラムが含まれます。1つはAtmega16が命令の送信者として機能し、もう1つはESP8266NodeMCUが命令の受信者として機能します。両方のプログラムは、このチュートリアルの最後にあります。Arduino IDEはESP8266とUSBaspプログラマーの書き込みに使用され、AtmelStudioはAtmega16の書き込みに使用されます。
1つのプッシュボタンとLEDはAtmega16と連動しているため、プッシュボタンを押すと、Atmega16はNodeMCUに指示を送信し、NodeMCUはそれに応じて電子メールを送信します。LEDはデータ送信のステータスを示します。それでは、Atmega16のプログラミングを開始してから、ESP8266NodeMCUを開始しましょう。
電子メールを送信するためのATmega16のプログラミング
動作周波数を定義し、必要なすべてのライブラリを含めることから始めます。使用するライブラリにはAtmelStudioパッケージが付属しています。
#define F_CPU 16000000UL #include #include
この後、ESP8266と通信するために、ボーレートを定義する必要があります。ボーレートは、Atmega16とNodeMCUの両方のコントローラーで同じである必要があることに注意してください。このチュートリアルでは、ボーレートは9600です。
#define BAUD_PRESCALE((( F_CPU /(USART_BAUDRATE * 16UL)))-1)
2つのレジスタUBRRLとUBRRHは、ボーレート値をロードするために使用されます。下位8ビットのボーレートはUBRRLにロードされ、上位8ビットのボーレートはUBRRHにロードされます。簡単にするために、ボーレートが値で渡されるUART初期化の関数を作成します。UART初期化機能には次のものが含まれます。
- レジスタUCSRBの送信ビットと受信ビットを設定します。
- レジスタUCSRCで8ビット文字サイズを選択します。
- UBRRLおよびUBRRHレジスタへのボーレートの下位ビットと上位ビットのロード。
void UART_init(long USART_BAUDRATE) { UCSRB-=(1 << RXEN)-(1 << TXEN); UCSRC-=(1 << URSEL)-(1 << UCSZ0)-(1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH =(BAUD_PRESCALE >> 8); }
次のステップは、文字を送信するための機能を設定することです。このステップには、空のバッファが終了するのを待ってから、char値をUDRレジスタにロードすることが含まれます。charは関数でのみ渡されます。
void UART_TxChar(char c) { while(!(UCSRA&(1 <
文字を転送する代わりに、以下のような文字列を送信する関数を作成します。
void UART_sendString(char * str) { unsigned char s = 0; while(str!= 0) { UART_TxChar(str); s ++; } }
で メイン() 関数呼び出し UART_initを() 送信を開始します。そして、Test文字列をNodeMCUに送信してエコーテストを実行します。
UART_init(9600); UART_sendString( "TEST");
LEDとプッシュボタンのGPIOピンの構成を開始します。
DDRA-=(1 << 0); DDRA&=〜(1 << 1); PORTA-=(1 << 1);
プッシュボタンが押されていない場合は、LEDをオンのままにし、プッシュボタンが押されている場合は、 NodeMCUへの「SEND」コマンドの送信を開始してLEDをオフにします。
if(bit_is_clear(PINA、1)) { PORTA-=(1 << 0); _delay_ms (20); } else { PORTA&=〜(1 << 0); _delay_ms (50); UART_sendString( "SEND"); _delay_ms (1200); }
ESP8266NodeMCUのプログラミング
NodeMCUのプログラミングには、Atmega16からのコマンドの受信と、1つのSMTPサーバーを使用した電子メールの送信が含まれます。
まず、インターネットを使用して電子メールを送信するため、WIFIライブラリを含めます。接続を成功させるためのWIFIssidとパスワードを定義します。SMTPサーバーも定義します。
#include
で 、セットアップ() 関数で、設定はATmega16のに似たボーレートは9600とWIFIと表示IPアドレスに接続するようボーレート。
Serial.begin(9600); Serial.print( "接続先:"); Serial.println(ssid); WiFi.begin(ssid、password); while(WiFi.status()!= WL_CONNECTED) { delay(500); Serial.print( "。"); }
内 ループ() 関数、受信は、受信ピンでバイト読み取りおよび文字列形式に変換します。
if(Serial.available()> 0){ while(Serial.available()> 0 && index1 <6) { delay(100); inChar = Serial.read(); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase(); for(byte i = 0; i <6; i ++){ variable.concat(String(inData)); } Serial.print( "variable is ="); Serial.println(変数); Serial.print( "indata is ="); Serial.println(inData); delay(20); } String string = String(variable);
受信コマンドが一致する場合は、sendEmail()関数を呼び出して受信者に電子メールを送信します。
if(string == "SEND"){ sendEmail(); Serial.print( "メールの送信先:"); Serial.println( "受信者"); Serial.println( ""); }
SMTPサーバーをセットアップすることは非常に重要であり、これを行わないと、電子メールを送信できません。また、通信中は、両方のコントローラーでボーレートを同じに設定してください。
つまり、これがESP8266をAVRマイクロコントローラーとインターフェースしてIoT通信を可能にする方法です。また、以下の作業ビデオも確認してください。