stm32 +appinventorを使用してesp8266と通信する
この章の実験の目的は、携帯電話をESP8266が提供するWIFIネットワークに接続し、カスタムアプリを開いて、ESP8266のIPアドレスとポート番号に接続し、アプリとESP8266モジュール間の通信を実現することです。 、次に、32開発ボードを制御するアプリの目的を達成し、開発します。ボード上のデータは、表示のためにアプリに返されます。
stm32とesp8266の通信については、前回の記事で紹介しましたが、今回は主にアプリ発明者の制作を紹介し、アプリのQRコードを生成し、最後に携帯電話にアプリをダウンロードして、 WIFI LAN。もちろん、stm32開発ボードを制御するために、stm32とesp8266の間のいくつかのことについて簡単に説明します。
この章で使用するデバイスは次のとおりです
。STM32F103ZET6最小システムボード
ESP8266-01Sモジュール
USB-microUSBデータケーブル
4本のDuPontケーブル
を次のように接続します
。32ボード3.3v-------->3.3vのESP826632
ボードGND ----------> ESP826632ボードPA
のGND2-------> ESP8266RX32
ボードPA3-------->ESP8266 TX
stm32はesp8266と通信します
まず、32プログラムのメインコードを添付します。
#include "stdio.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "serial.h"
#include "esp8266.h"
/* AT指令返回值的结尾没有\r\n这样的回车换行符,
* 而在串口调试助手中,需要MCU输出\r\n给串口调试助手才能刷新缓冲区把字符显示出来,
* 同时这个\r\n还起到回车换行的目的*/
/* AT指令的结尾处必须是\r\n*/
/* serial.h中的usart1_send_usart2函数用于没有USB转TLL模块的人使用,
* 此函数作用是利用串口1发送AT指令给串口2,串口2将AT指令发送给ESP8266,实现对ESP8266的AT指令配置,
* 当然,如果你有USB转TTL模块的话,可以直接将ESP8266与USB转TTL模块直连,然后在串口调试助手里面直接配置AT指令*/
extern u8 esp_sipsend1[];
extern u8 esp_sipsend2[];
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口1初始化为115200
Uart2_Init(115200); //串口2初始化为115200
LED_Init(); //初始化与LED连接的硬件接口
Esp8266_Init();
while(1)
{
usart1_send_usart2(); //利用串口1发送AT指令给串口2,从而达到配置ESP8266的目的,并且让模块的返回值在串口1打印出来
if(Data_Compare((u8 *)"LEDK")) //点亮板上的led
{
led(1);
Clear_Buf();
Uart_SendStr(USART1, (u8 *)"led is open\r\n");
Uart_SendStr(USART2, esp_sipsend1); //利用串口2给esp8266发送AT+CIPSEND指令,告诉它下一次将发送具体数据
Usart2_Receive_Data(USART1); //将串口2接收到的AT+CIPSEND指令返回的数据显示在串口1上
Uart_SendStr(USART2, (u8 *)"led is open\r\n"); //发送具体数据给esp8266,让他转发到app上
}
else if(Data_Compare((u8 *)"LEDG")) //关闭板上的led
{
led(0);
Clear_Buf();
Uart_SendStr(USART1, (u8 *)"led is close\r\n");
Uart_SendStr(USART2, esp_sipsend2); //利用串口2给esp8266发送AT+CIPSEND指令,告诉它下一次将发送具体数据
Usart2_Receive_Data(USART1); //将串口2接收到的AT+CIPSEND指令返回的数据显示在串口1上
Uart_SendStr(USART2, (u8 *)"led is close\r\n"); //发送具体数据给esp8266,让他转发到app上
}
}
}
このコードのserial.hにはいくつかのカスタム関数が含まれており、関数の関数は右側のコメントに示されています。コードは次のとおりです。
#ifndef __SERIAL_H
#define __SERIAL_H
#include "stdio.h"
#include "sys.h"
#include "delay.h"
#include "string.h"
#include "usart.h"
#define tbuf 100
void Uart2_Init(u32 bound); //初始化串口2
void Clear_Buf(void); //清除缓冲区数据
void Uart_SendStr(USART_TypeDef* USARTx, u8 *s); //往某一个串口发送指定字符串
void Usart2_Receive_Data(USART_TypeDef* USARTx); //将串口2返回的数据发送给串口1进行显示
u8 Data_Compare(u8 *p); //指定字符串与缓存数组数据进行数据比较
void usart1_send_usart2(void); //利用串口1发送AT指令给串口2,从而达到配置ESP8266的目的,并且让模块的返回值在串口1打印出来
#endif
Usart2_Receive_Data関数は、esp8266から返されたデータを受信し、シリアルポート1に表示するために使用されます。シリアルポート2はesp8266に接続されているため、シリアルポート2がATコマンドをesp8266に正しく送信する限り、esp8266は応答値を返します。手元にUSBスイッチはありません。TTLモジュールは、このメソッドを使用してesp8266モジュールの戻り値を監視することしかできません。
usart1_send_usart2の機能は、シリアルポートデバッグアシスタントを使用してATコマンドをシリアルポート1に送信することです。シリアルポート1はデータを受信した後、送信の目的を達成するために、シリアルポート2を介してesp8266モジュールにデータを送信します。 ATは、シリアルポートデバッグアシスタントを介してesp8266モジュールを構成するように命令します。このように、手元にUSB to TTLモジュールがないため、これが最後の手段です。
USB to TTLモジュールが手元にある場合は、上記の2つの機能は不要です。USBtoTTLモジュールをesp8266モジュールに直接接続し、USB側をコンピューターに接続し、シリアルデバッグアシスタントを使用してATコマンドを直接送信します。 esp8266モジュールとディスプレイモジュールの戻り値を設定します。
main関数のEsp8266_Init関数は、一連のesp8266を構成して、アプリクライアントに接続できるようにすることです。詳細なコードは次のとおりです。
#include "esp8266.h"
u8 esp_at[] = "AT\r\n"; //握手连接指令,返回"OK"
u8 esp_cifsr[] = "AT+CIFSR\r\n"; //本机IP地址查询指令
u8 esp_cipsend[] = "AT+CIPSEND=6\r\n"; //设置发送数据长度
u8 esp_test[] = "sunny\r\n"; //数据内容
u8 esp_rst[] = "AT+RST\r\n"; //软件复位
u8 esp_cwmode[] = "AT+CWMODE=2\r\n"; //设置ESP8266的工作模式2(AP模式,WIFI模块作为热点),返回"OK"或者"no change"
u8 esp_cwsap[] = "AT+CWSAP=\"ESP8266_TEST\",\"1234567890\",1,4\r\n";//设置WIFI的名称、密码、通道号、加密方式(4-WPA_WPA2_PSK)
u8 esp_cipmux[] = "AT+CIPMUX=1\r\n"; //打开多连接
u8 esp_cipserver[] = "AT+CIPSERVER=1,8080\r\n"; //建立TCP服务器,开放端口8080,端口号可以改成其他的例如8086等等
u8 esp_cipsto[] = "AT+CIPSTO=2880\r\n"; //设置服务器超时时间为2880s,也就是连接服务器过程中可以等待的时间
extern u8 RX_num; //接收计数变量
extern u8 RX_buffer[tbuf];
void Esp8266_Init(void)
{
Uart_SendStr(USART2, esp_cwmode); //设置ESP8266的工作模式2 AP,返回"OK"或者"no change"
Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示
Uart_SendStr(USART1, (u8 *)"\r\nOK,set mode as AP with ESP8266!\r\n----------\r\n");
Uart_SendStr(USART2, esp_rst); //设置ESP8266的工作模式后需要复位以生效该模式
Usart2_Receive_Data(USART1); //复位后可能会返回一堆乱码
Uart_SendStr(USART1, (u8 *)"\r\nOK,set RST success!\r\n----------\r\n");
Uart_SendStr(USART2, esp_cwsap); //设置WIFI的名称及密码
Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示
Uart_SendStr(USART1, (u8 *)"\r\nOK,set cwsap success!\r\n----------\r\n");
Uart_SendStr(USART2, esp_cipmux); //设置多连接(多路连接模式)
Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示
Uart_SendStr(USART1, (u8 *)"\r\nOK,set cipmux success!\r\n----------\r\n");
Uart_SendStr(USART2, esp_cipserver); //设置wifi模块为TCP服务器模式,并配置端口为8080
Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示
Uart_SendStr(USART1, (u8 *)"\r\nOK,set server success!\r\n----------\r\n");
Uart_SendStr(USART2, esp_cipsto); //设置服务器超时时间为2880s
Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示
Uart_SendStr(USART1, (u8 *)"\r\nOK,set cipsto success!\r\n----------\r\n");
Uart_SendStr(USART2, esp_cifsr); //获取本机IP地址
Usart2_Receive_Data(USART1); //将串口2收到的数据发送给串口1进行显示
Uart_SendStr(USART1, (u8 *)"\r\nOK,get ip address success!\r\n----------\r\n");
}
ATコマンドについては、インターネットで見つけたら詳細な説明がたくさんありますが、ここではあまり説明しませんし、他の機能についても言うことはありません。これまでのところ、stm32コード一部はこちらです。
モバイルアプリの制作、生成、制御
次に、アプリの設計に進みます。この章のアプリの設計では、AppInventorを使用します。
APPINVENTORはGoogleLabsによって開発され、後にMITに引き渡されました。これは、ビルディングブロックを使用してアプリケーションをすばやく構築し、AIコンパニオンと組み合わせて携帯電話で簡単にテストおよび適用できるビジュアルプログラミング環境です。
APP INVENTORは完全にWebベースのオンラインプログラミングツールであり、国内外で利用可能なサーバーがいくつかあります。
MITサーバーのログインアドレス:http://appinventor.mit.edu/explore/Guangzhou
サーバーのログインアドレス:http://app.gzjkw.net/login
国内の広州サーバーを使用することをお勧めします。
QQでログインできます。ログイン後、プロジェクトを作成してプログラミングインターフェイスに入ることができます。
真ん中のディスプレイは携帯電話の画面です。ツールを携帯電話の画面にドラッグすると、プログラミングを開始できます。現在、Android携帯電話のみがサポートされています。
プログラミングとデバッグを容易にするために、AI Companionを携帯電話にインストールし、メニューバーの[ヘルプ]-> [AIコンパニオン情報]をクリックしてダウンロードヘルプページを開くと、ダウンロードアドレスを開くことができます。
AIコンパニオンは携帯電話で写真のQRコードをスキャンすることでダウンロードできますプログラムをデバッグするときは、サーバー側のメニューバー接続->AIコンパニオンを選択して接続QRコードと6桁をポップアップしますコードを入力し、対応するモバイルAIコンパニオンに6桁のコードを入力します。コードを入力するか、QRコードをスキャンすると、サーバーとの接続を確立してプログラムのデバッグを開始できます。同時に、ウェブアプリのインターフェースがあれば変更があった場合、モバイルAIコンパニオンの対応するインターフェースはそれに応じてリアルタイムで更新されます。
このWIFI通信アプリの設計プロセスでは、拡張プラグインであるtcp接続プラグインを使用する必要があります。tcpを使用してesp8266で提供されるwifiに接続するには、アプリの発明者にインポートする必要があります。モジュール。このプラグインのリンクは次のとおりです。appinventorextension
上の図で作成されたアプリインターフェイスは、左側の基本的なコントロールと拡張プラグインを使用しています。ロジックデザイン図は次のとおりです。
このロジックデザインも非常にシンプルで、左側にいくつかの機能ブロックが組み込まれています。詳細なアプリ発明者の文法がたくさんあり、オンライン検索もたくさんあるので、ここではあまり紹介しません。この時点で、アプリのデザインは基本的に完了し、アプリが生成されます。メニューバーのパッケージapk->パッケージapkをクリックして、QRコードを表示します。このとき、アプリのQRコードはAIコンパニオンアプリを生成し、AIコンパニオンのスキャンQRコードを使用して、生成されたアプリのQRコードをスキャンします。スキャン後、デフォルトのブラウザーに自動的にジャンプしてアプリをインストールし、アプリをインストールして開きます。新しいアプリでESP8266と入力します。ipアドレスとポート番号(esp8266初期化機能の実行時にシリアルデバッグアシスタントでIPアドレスを出力できます。ポート番号は、以前のAT+CIPSERVERの8080ポート番号です。 = 1,8080)、接続すると、接続が成功します。次に、送信領域にLEDKと入力し、[送信]をクリックすると、文字列「LEDK」がESP8266モジュールに送信されます。モジュールが情報を受信すると、次のようになります。シリアルポート2を介してMCUに返されます。MCUがデータを受信すると、プログラムに設定されます。文字列が比較され、一致している場合は、対応する操作命令が実行され、MCU上のデータは次のようになります。表示のためにアプリに戻りました。
appinventorによって作成されたappプロジェクトのリンクを添付してください:app_inventor project
stm32プロジェクト全体の通信コードのリンクを添付してください:stm32 + app inventor +esp8266通信コード
は以下のメッセージである必要があります。すぐに送信します可能な限り、ご不明な点がございましたら、以下にコメントすることもできます。