当前位置: 首页 > news >正文

谷歌seo新规则seo营销课程培训

谷歌seo新规则,seo营销课程培训,aws ec2 wordpress,太原高级seo主管4G接线 一、项目需求 服务器通过4G模块远程遥控开关灯。 二、项目实现 复制项目文件夹38-wifi控制风扇项目 重命名为39-4G遥控点灯 打开项目文件 加载文件 main.c #include "sys.h" #include "delay.h" #include "led.h" #include "ua…


 

 4G接线

一、项目需求

        服务器通过4G模块远程遥控开关灯。

二、项目实现

复制项目文件夹38-wifi控制风扇项目

重命名为39-4G遥控点灯

打开项目文件

加载文件

main.c

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "e840.h"
#include "string.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();//初始化led灯uart1_init(115200);//这里是跟电脑相连接的串口波特率e840_init(9600);//我这里的e840的波特率为9600// printf("hello word!\r\n");char recv_data[E840_RX_BUF_SIZE];while(1){ e840_receive_data(recv_data);//现在是把接收到的数据传到recv_data这里了if(strstr(recv_data,"ON") != NULL)//判断我们接收到的字符串里面是否有ON这个值,有的话打卡风扇led1_ON();else if(strstr(recv_data,"OFF") != NULL)//没有不打开led1_OFF();delay_ms(10);
//        esp8266_test();
//        delay_ms(500);}
}

e840.c

#include "sys.h"
#include "e840.h"
#include "string.h"
#include "stdio.h"
#include "delay.h"
#include "stdarg.h"uint8_t e840_rx_buf[E840_RX_BUF_SIZE];//定义一个数组,用来保存接收的缓冲区
uint8_t e840_tx_buf[E840_TX_BUF_SIZE];//定义一个数组,用来保存发送的缓冲区
uint16_t e840_cnt = 0,e840_cntPre = 0; //定义一个计数器,和保存计数器原本状态的变量UART_HandleTypeDef e840_handle = {0};void e840_uart_init(uint32_t baudrate)
{e840_handle.Instance = USART2;e840_handle.Init.BaudRate = baudrate;  //波特率e840_handle.Init.Mode = UART_MODE_TX_RX;//收发模式;e840_handle.Init.Parity = UART_PARITY_NONE;//无校验位e840_handle.Init.WordLength = UART_WORDLENGTH_8B;  //字长:8个字长e840_handle.Init.StopBits = UART_STOPBITS_1; //停止位:1个停止位e840_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; //无硬件流控HAL_UART_Init(&e840_handle);
}void USART2_IRQHandler(void)
{uint8_t receive_data = 0;//这个函数是用来检查特定的UART接口(在这个例子中是e840_handle所代表的UART接口)是否有数据可读if(__HAL_UART_GET_FLAG(&e840_handle,UART_FLAG_RXNE) != RESET)//关注RXNE这个标志位的值是不是不为reset(0){if(e840_cnt >= sizeof(e840_rx_buf))//如果接收的字符长度大于字符缓冲区的长度,则把缓冲区长度置0e840_cnt = 0;//如果RXNE的值为1,证明有数据,所以需要接收数据HAL_UART_Receive(&e840_handle,&receive_data,1,1000);//句柄,接收的数据存放在哪?接收数据的个数,超时时间e840_rx_buf[e840_cnt++] = receive_data;//将接收的数据存放在e840rx_buf数组中//HAL_UART_Transmit(&e840_handle,&receive_data,1,1000);//发送数据:句柄,要发送的数据,发送数据的长度,超时}
}
//这个函数主要用来判断e840cnt有没有动,如果没有动证明接收完成了
uint8_t e840_wait_receive(void)
{if(e840_cnt == 0)//如果cnt为0证明,出现了错误return E840_ERROR;//出现错误if(e840_cnt == e840_cntPre)//判断当前cnt和上一个cnt是否一致,如果是一致的证明数据不动了,传输完成{e840_cnt = 0;//cnt清0return E840_EOK;//数据接收完成}e840_cntPre = e840_cnt;//把当前计数器cnt的值赋给之前计数器return E840_ERROR;//}
//把接收寄存器的内容清空
void e840_rx_clear(void)
{//把接收缓冲器清空memset(e840_rx_buf,0,sizeof(e840_rx_buf));//清空长度e840_cnt = 0;
}
//这个函数在while循环里,来一直判断当前数据是否接收完
uint16_t e840_receive_data(char *recv_data)
{if(e840_wait_receive() == E840_EOK)//判断数据是否接受完整{printf("e840 recv: %s\r\n",e840_rx_buf);//接收完整,打印数据//我们把e840_rx_buf中的内容通过memcpy的方式,全部copy到recv_data中memcpy(recv_data,e840_rx_buf,strlen((const char *)e840_rx_buf));e840_rx_clear();//清除当前接收//返回e840_rx_buf的内容以及长度return strlen((const char*)recv_data);}return 0;
}
//发送数据的函数
void e840_send_data(char *fmt,...)
{va_list ap;uint16_t len;va_start(ap,fmt);vsprintf((char *)e840_tx_buf,fmt,ap);va_end(ap);len = strlen((const char *)e840_tx_buf);HAL_UART_Transmit(&e840_handle,e840_tx_buf,len,100);
}void e840_init(uint32_t baudrate)
{//printf("e840初始化开始...\r\n");//e840串口初始化e840_uart_init(baudrate);}

e840.h

#ifndef __E840_H__
#define __E840_H__#include "sys.h"#define E840_RX_BUF_SIZE         128 //接收的长度
#define E840_TX_BUF_SIZE         64  //发送的长度#define E840_EOK                  0  //宏定义错误代码 ok
#define E840_ERROR                1  //错误
#define E840_ETIMEOUT             2  //超时
#define E840_EINVAL               3  //数据非法void e840_init(uint32_t baudrate);
uint16_t e840_receive_data(char *recv_data);
//void e840_test(void);#endif

注意:

执行结果:

        服务器和4G模块以透传模式相连接,开发板烧录代码,上电,4G模块通电,蓝(电源灯)、黄(模组附着网络灯(SIM))、绿(模组与服务器连接成功)三个指示灯常亮。串口1和电脑通过USB转TTL相连接,并且打开对应串口的串口助手。

        当在服务器中发送信息,可通过透传模式将信息传递给4G模组,4G模组接收到信息,通过RX-TX将信息传递给开发板,该信息执行开发板中代码信息,开发板中的串口1接收到信息,所以,该信息可以在串口助手中查看到,并且,对应LED灯状态改变。

本实验,要注意,串口的波特率和4G模组的波特率,可在main函数中使用正确的波特率。

补充:在本实验中,使用花生壳APP可以将我们的一个内网的IP地址,映射成我们的外网IP地址,然后我们的其他外网的ip就可以与该外网进行合法通信,这个过程叫做内网穿透。

  外网连接(内网穿透)

 内网连接

三、出现的问题

        当使用亿佰特时,选择对应的串口号和波特率之后,打开串口,进入配置,显示进入AT指令模式失败原因?

波特率选择的不对,换个波特率试试

http://www.yayakq.cn/news/375673/

相关文章:

  • 电商网站建设平台怎么样做推广网站
  • 网站建设前端工程师岗位职责衡水网站建设03181688
  • 网站内页的设计自己开发一个wordpress主题
  • 网站seo模块敬请期待造句
  • 交互网站图免费创建论坛
  • 网站建设盒子模型浮动阿里云空间如何安装wordpress
  • 网站电脑速成培训班福建省法冶建设知识有奖网站
  • 备案用的网站建设规划书怎么写网站主页设计费用
  • 网站建设属于哪个分类编码需要详细填写
  • 如何建设正规彩票网站dw做六个页面的网站
  • 成都网站建设公司司成都网站建设哪家强
  • 广州联享品牌网站建设高端服装品牌排行榜
  • 营销型网站建设新感觉建站统一登录入口
  • 网站域名解析查询网站制作公司员工
  • 医保局微网站开发阿里云主机搭建网站
  • 中小企业网站制作软件怎么建好网站
  • 南昌网站建设平台优化网站推广教程整站
  • 个人备案能做公司网站吗临沂医院手机网站建设
  • 智慧团建网站登录电脑版网站建设专业公司
  • 那个网站做淘宝推广比较好企业站网络推广
  • 高端网站的建设中交建设集团网站
  • 胶州市城乡建设局网站截图做彩票网站需要什么条件
  • 东莞网站推广建设网站做联盟广告能赚钱吗
  • 手机网站建站网站制作价格行情
  • 驻马店住房和城乡建设局网站博物馆建设网站的目的及功能
  • 网站首屏做多大国内十大管理咨询公司
  • 建设博客网站帮别人做钓鱼网站犯法吗
  • 网站商城方案seo外包怎么收费
  • 建设维护网站未签订合同前端开发岗位职责
  • dede免费网站模板下载国外手机网站欣赏