STM32最小系统通过ESP8266开发板NodeMCU向阿里云发送日志

1.硬件型号

(1)NodeMCN型号:ESP8266MOD。

 

(2)STM32型号:STM32最小系统

2.软件

(1)通过Arduino IDE编写ESP8266-NODE模块的程序(Arduino IDE需要包含esp8266 by ESP8266和PubSubClient)。

(2)通过Keil uVision5编写STM32的程序。

3.引脚连线

(1)ESP8266-NODE与STM32连线

ESP8266-NODESTM32
RXA9
TXA10

百度网盘链接:

链接 :百度网盘 请输入提取码

提取码:a8oi

4.(1)ESP8266-NODE代码(Arduino IDE)

#include <ESP8266WiFi.h>
/* 依赖 PubSubClient 2.4.0 */
#include <PubSubClient.h>
 #include <ArduinoJson.h>
 #include <SoftwareSerial.h>
/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID         ""
#define WIFI_PASSWD       ""
 

 #define SENSOR_PIN    LED_BUILTIN
/* 线上环境域名和端口号 */
#define MQTT_SERVER       ""
#define MQTT_PORT         1883//端口号
#define MQTT_USRNAME      ""
#define CLIENT_ID         ""
#define MQTT_PASSWD       ""
//发布消息用的topic
#define PubTopic ""
 
WiFiClient espClient;
PubSubClient  client(espClient);
int i=0;
char *inputString = "";      // a String to hold incoming data
// String inputString = "";
//收到消息后的回调函数
 
 void callback(char *topic, byte *payload, unsigned int length)
{
  int i=0;
  char *a;
  payload[length] = '\0';
  a=(char *)payload;

  if(i=0)
  {
    i++;
  }
  else
  {
    Serial.print(a);
  }
  
}
//wifi初始化
void wifiInit()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWD);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.print("C");
  }
  delay(1000);
  Serial.print("D");
  client.setServer(MQTT_SERVER, MQTT_PORT);   /* 连接WiFi之后,连接MQTT服务器 */
  client.setCallback(callback);
}
 
 
//连接到服务器
void mqttCheckConnect()
{
  while (!client.connected())
  {
    Serial.print("E");
    if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
 
    {
      Serial.print("F");
 
    }
    else
    {
      delay(5000);
    }
  }
}
void setup()
{
    Serial.begin(9600); //开启串口
    wifiInit();//连接wifi
    mqttCheckConnect();//连接阿里云;
}
void pubMsg(char *msg)
{
  boolean b;
  b=client.publish(PubTopic, msg);
  if(b==0)
  {
    Serial.print("G");
  }
  else
  {
    Serial.print("H");
  }
}
void serialEventRun()
{
  while (Serial.available())
  {
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString[i]= inChar;
    i++;
    if (inChar == '\0') {
      pubMsg(inputString);
      inputString="";
      i=0;
    }
    
  }
}
// the loop function runs over and over again forever
void loop()
{
  client.loop();//保持客户端的连接
}

(2)STM32(Keil uVision5)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include "LED.h"

uint8_t RxData;
int main(void)
{
	LED_Init();
	OLED_Init();
	OLED_ShowString(1, 1, "RxData:");
	Serial_Init();
	while (1)
	{
		if (Serial_GetRxFlag() == 1)
		{
			RxData = Serial_GetRxData();
			if(R>100)
			{
				R=0;
			}
			OLED_ShowHexNum(1, 8, RxData, 2);
			if(RxData==0x43)
			{
				OLED_ShowString(2, 1, "wife connecting");
				OLED_ShowString(3, 1, "               ");
				OLED_ShowString(4, 1, "               ");
			}
			if(RxData==0x44)
			{
				OLED_ShowString(2, 1, "wife success!  ");
			}
			if(RxData==0x45)
			{
				OLED_ShowString(3, 1, "qqit connecting");
			}
			if(RxData==0x46)
			{
				OLED_ShowString(3, 1, "qqlt success!   ");
			}
			if(RxData==0x47)
			{
				OLED_ShowString(4, 1, "send failed!    ");
			}
			if(RxData==0x48)
			{
				OLED_ShowString(4, 1, "send success!   ");
			}
			if(RxData==0x41)
			{
				LED1_Turn();
			}
			
			if(RxData==0x42)
			{
				LED2_Turn();
			}
			Serial_SendString("Hello world");
			Delay_ms(5000);

		}
	}
}

5.通信

(1)STM32每5000毫秒向ESP8266发送一个数据;

(2)ESP8266接收到数据后发送到阿里云日志;

6.实验过程

阿里云每5000毫秒收到由ESP8266发送的日志,查看日志可以看到STM32发送来的数据:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值