网站服务商是什么,我下载的免费网站模版源代码是加密的,怎么做免费的宣传网站,wordpress黑糖主题文章目录 单片机发送AT指令给ESP8266接收手机app数据的结构体C语言的枚举类枚举类的应用 设置水泵开启关闭代码分析DS18B20的端口 单片机发送AT指令给ESP8266
以下是一个简单的示例#xff0c;演示了如何使用AT指令从单片机发送数据给ESP8266模块#xff0c;并通过Wi-Fi发送… 文章目录 单片机发送AT指令给ESP8266接收手机app数据的结构体C语言的枚举类枚举类的应用 设置水泵开启关闭代码分析DS18B20的端口 单片机发送AT指令给ESP8266
以下是一个简单的示例演示了如何使用AT指令从单片机发送数据给ESP8266模块并通过Wi-Fi发送到远程服务器
假设您的单片机使用UART与ESP8266通信下面是一个示例代码
#include SoftwareSerial.hSoftwareSerial espSerial(2, 3); // RX, TXvoid setup() {Serial.begin(9600); // 串口监视器espSerial.begin(115200); // ESP8266串口通信
}void loop() {// 从传感器中读取数据int sensorData analogRead(A0);// 将数据转换为字符串String dataToSend String(sensorData);// 发送AT指令给ESP8266模块espSerial.println(ATCIPSTART\TCP\,\your_server_ip\,your_server_port);delay(1000);espSerial.println(ATCIPSEND String(dataToSend.length() 2));delay(500);espSerial.println(dataToSend);delay(5000); // 延时等待数据发送完成// 关闭TCP连接espSerial.println(ATCIPCLOSE);delay(1000);delay(5000); // 每隔一段时间进行一次数据发送
}在这个示例中单片机通过软串口SoftwareSerial与ESP8266模块通信。它首先从传感器中读取数据然后将数据转换为字符串并发送给ESP8266模块。单片机通过发送AT指令来控制ESP8266模块的行为包括建立TCP连接、发送数据以及关闭连接。
请注意您需要根据您的实际情况修改代码中的IP地址和端口号并确保ESP8266模块已正确配置以连接到您的Wi-Fi网络。此外由于示例代码中使用了延时函数实际应用中可能需要根据需要进行更复杂的时间控制和错误处理。
接收手机app数据的结构体
typedef struct app
{u8 wifiSta; // WiFi连接状态u8 waterSta; // // 1.水泵开启或关闭float temp; //温度u8 turbidity; // 浑浊度float ph; // PH值u8 tds; // tds}appData;
C语言的枚举类
枚举类的隐式的定义
enum DAY
{MON, //默认0TUE, //默认1WED, //默认2THU, //默认3FRI, //默认4SAT, //默认5SUN //默认6
};1.在c语言中枚举类中的是枚举成员默认枚举成员默认是整数类型。 2.隐式定义时第一个枚举成员的默认值为0后续成员值依次递加1。 3.可以自定义枚举类型的值从而自定义某个范围内的整数。 4.枚举型是预处理指令#define的替代。 枚举类的显式的定义
enum DAY
{MON 1, //显式指定值为1TUE 5, //显式指定值为5WED 19, //THU 27, //FRI 121, //SAT 123, //SUN 345 //
};枚举类的应用
mygpio.h文件
typedef enum GPIONUM
{BEEP, //蜂鸣器默认为0PUMP, //水泵默认为1GPIOMAX, //GPIOMAX默认为2
} GPIONUM; typedef struct GPIOCOFIG
{GPIO_TypeDef *GPIOx;uint16_t GPIO_Pin;uint32_t RCC_APB2Periph;GPIOMode_TypeDef ioMode;
} GPIOCOFIG;
设置水泵开启关闭代码分析
// 从app获取水泵数据0或1然后设置水泵状态if (g_appdata.waterSta 1){ggpio.gpio_set(PUMP, 1);}else{ggpio.gpio_set(PUMP, 0);}ggpio.gpio_set(PUMP, 1);这里对水泵进行了设置 实际是ggpio.gpio_set(1, 1); -GPIO_SetBits(gpioconf[1].GPIOx, gpioconf[1].GPIO_Pin); -GPIO_SetBits(GPIOB, GPIO_Pin_10); 可以看出水泵的引脚是B10,那蜂鸣器的引脚是A4
mygpio.c文件如下
#include stm32f10x.h
#include mygpio.h
#include sys.h
#include delay.h
#include stdio.h
#include string.h
#include hmi_common.h
#include gizwits_protocol.hstatic void init(void);
static void gpio_scan(void);
static void gpio_set(GPIONUM gpiox, uint8_t levelid);//定义了一个GPIOCOFIG 数组数组名为gpioconf,GPIOMAX为2
static GPIOCOFIG gpioconf[GPIOMAX] {// 管脚组 管脚号 管脚组时钟 IOMODE{GPIOA, GPIO_Pin_4, RCC_APB2Periph_GPIOA, GPIO_Mode_Out_PP},{GPIOB, GPIO_Pin_10, RCC_APB2Periph_GPIOB, GPIO_Mode_Out_PP},
};GPIO ggpio {.gpio_init init,.gpio_scan gpio_scan,.gpio_set gpio_set,
};uint8_t g_gpio_statu[GPIOMAX];// 按键初始化函数
static void init(void) // IO初始化
{GPIO_InitTypeDef GPIO_InitStructure;uint8_t i 0;for (i 0; i GPIOMAX; i){memset(GPIO_InitStructure, 0, sizeof(GPIO_InitTypeDef));RCC_APB2PeriphClockCmd(gpioconf[i].RCC_APB2Periph, ENABLE);GPIO_InitStructure.GPIO_Pin gpioconf[i].GPIO_Pin;GPIO_InitStructure.GPIO_Mode gpioconf[i].ioMode; // 浮空输入GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; // IO口速度为50MHzGPIO_Init(gpioconf[i].GPIOx, GPIO_InitStructure); // 根据设定参数初始化}ggpio.gpio_set(BEEP, 1);ggpio.gpio_set(PUMP, 0);
}static void gpio_scan(void)
{int i 0;for (i 0; i GPIOMAX; i){g_gpio_statu[i] GPIO_ReadInputDataBit(gpioconf[i].GPIOx, gpioconf[i].GPIO_Pin);}}static void gpio_set(GPIONUM gpiox, uint8_t level)
{if (level 1){GPIO_SetBits(gpioconf[gpiox].GPIOx, gpioconf[gpiox].GPIO_Pin);}else{GPIO_ResetBits(gpioconf[gpiox].GPIOx, gpioconf[gpiox].GPIO_Pin);}
}
DS18B20的端口
dsl8b20的端口PA0
u8 DS18B20_Check(void)
{ u8 retry0;DS18B20_IO_IN();//SET PA0 INPUT while (DS18B20_DQ_INretry200){retry;delay_us(1);}; if(retry200)return 1;else retry0;while (!DS18B20_DQ_INretry240){retry;delay_us(1);};if(retry240)return 1; return 0;
}