您好。
继续与GSM-调制解调器和stm32描述。上一篇文章探讨了与调制解调器的相互作用作为一个电话)(
如前一个例子所示,这里使用两个USART A,一个定时器和LED输出。也就是说,除了一个-添加输出)PA0)没有什么新的控制继电器,通过它锁模块……
这是必要的,与董事会,模块将被关闭,并放弃所有的设置。
工作方式如下:
启动时,自动设置USART的速度为A-57600,并开始发送配置指令的功能。
gprs.c.)发送这些命令时,程序将检查模块的响应,如果程序出错,程序将暂停,并开始闪烁(
预调是在程序开始,块…
所有发生的事情)和成功的命令,和错误)出现在终端。
在错误处理单元…
while(1) // мигаем 5 секунд и ресетим плату
{
count_err++;
HAL_GPIO_TogglePin(ER_LED_GPIO_Port, ER_LED_Pin);
HAL_Delay(100);
//if(count_err 49) HAL_NVIC_SystemReset();
}
……有一个评论功能,您可以重新计算费用)和它的模块。错误处理不仅在初始配置,但在未来的工作。
♪♪该函数传递两个参数)作为一个例子,两个数字被发送到GET请求服务器…
现在,参数查询已被评论,并提供了一个简单的测试网站。如果你下载一个程序,你会得到你想要的页面…
要将数据发送到服务器,您必须有这个服务器,并创建一个文件来检查您的工作。
……
?php
$today = date("Y.m.d H:i:s"); //получаем текущие дату и время
$argument_a = $_REQUEST['a']; //получаем значение посланной переменной "а"
$argument_b = $_REQUEST['b']; //получаем значение посланной переменной "b"
echo "Hello, reciv - "." $argument_a "." $argument_b ".", date - ". "$today";
?
取消上一行并填写您的地址。参数可能是更多的,但你必须确保字符串)从AT开始不超过64个字符。
如果一个字符串是更大的,然后发送它的部分,只有最后一部分包含字符
♪♪
我的意思是,如果你有这样的线…
然后发送看起来像这样…
回来的时候,他们送的东西和日期…
然后在功能进行测试,如果一切都好的话,发送数据命令—
:
GET
-POST
HEAD
然后又进行测试,如果成功的话,从服务器发送一个读命令—
下面描述整个过程略为详细一些。
数据被读取1024字节)(可以放大到usart:/u ring.h)和输出到终端。处理数据的地方写的是“你可以问一个问题。
///////////////////////////////// чтение ответа сервера /////////////////////////////////////
if(flag)
{
flag = 0;
HAL_Delay(500);
char read_buf[GPRS_RX_BUFFER_SIZE] = {0,};
while(gsm_available())
{
uint16_t i = 0;
memset(read_buf, 0, GPRS_RX_BUFFER_SIZE);
while(gsm_available())
{
read_buf[i++] = gsm_read();
if(i GPRS_RX_BUFFER_SIZE - 1) break;
}
HAL_UART_Transmit(DEBUG, (uint8_t*)"\n----------\nREAD_BUF:\n----------\n", strlen("\n----------\nREAD_BUF:\n----------\n"), 1000);
HAL_UART_Transmit(DEBUG, (uint8_t*)read_buf, strlen(read_buf), 1000);
// тут можно парсить ответ
}
}
我有一些评论,我不知道该怎么做。一方面,这可能是一个一次性的错误),假设您定期发送数据,而服务器由于某种原因没有接受请求,并将继续正常工作,而另一方面,这可能是一个长期的问题)(最简单的解决方案是在那里添加一个bug计数器,如“如果你有十次,然后再回扣费用。”
让我看看发生了什么事,让我在终端的命令…
返回好
0-数据已收到的GET-查询.200-服务器响应代码1270-科尔-在接收的字节。
当通过终端发送命令,数据将被读取到一个函数,在无限周期的gsm.eu可用)。
如果在一段时间内(大约4小时)不发送任何东西给服务器,GPRS连接将被中断,模块发送通知
♪♪要恢复连接,需要发出一个命令
♪♪在代码中有一个处理这种情况…
else if(strstr(buf, "+SAPBR") != NULL)
{
if(strstr(buf, "DEACT") != NULL)
{
set_comand(ATSAPBR11); // установить соединение
}
}
所有的命令都在文件中描述
,在“互联网”部分。
如果在无限循环中取消功能
数据将每分钟发送一次…
TCP
这几乎是相同的,只有在查询服务器的方法的差异。开始时进行调整,检查和错误处理……
添加功能
代码中所有评论都是为了检查各种状态)。在文件中
♪♪
与网络的所有工作都是在功能
♪♪
请求包含下列命令…
发送到一个港口和地址模块,然后发送到“连接好”。如果你不指定的ip-AT+CIPSTART=“,”TCP,“”134.123.45.67“”80”,那么你可以不配置DNS-Server)(命令set.u comand)ATCDNSKFG更新;//安装DNS服务器在程序开始时
-这个指令告诉模块,现在将输入数据(a=33b=55。”该模块将发送一个邀请的象征。”然后你可以输入数据。为了让模块意识到数据输入已经结束,您可以发送到服务器,您必须发送一个字符。
下一页)
如果你给一个命令是这样的-AT+CIPSEND=23)数字是一个数字的字节数发送给指定的字符数后,模块将发送数据到服务器
没有必要引入。
数据行(通常的GET查询)看起来像这样:
确认数据发送模块返回“SEND OK”。然后你可以从服务器上检索的响应…
当我们完成了数据接收,我们发送一个连接关闭命令“+”CIPCLOSE。然而,可能会发生这样的情况,当我们阅读数据时,模块本身将自动关闭连接,然后这个命令将返回错误-
这没有什么大不了的。顺便说一句,所有错误的模块是由operation not allowed响应。
函数
这是毫无疑问的,但没有什么能阻止你把你想要的东西给她。
如果你不发送任何东西很长一段时间,该模块将停用GPRS和发送消息“DEACT”——这是一个无限周期的处理。
在例子中,它提供了一个机会,打电话给一个模块,当你确定你想做什么,例如重新启动。其他功能可以添加到第一部分。
使用此模块作为服务器,你必须有一个SIM卡的白色IP)(APN设置将是不同的)和一个小的初始化更改。代替
要发出命令
,其中1表示启动服务器,而80则是端口。当有人连接到服务器,模块将发送消息
♪♪下一步怎么办我不知道,因为我没有尝试过,但显然,你需要的答案就像TCP-例。禁用服务器命令
♪♪
而且,更重要的是,一个例子,从thingspeak数据传输和阅读。
谢谢你.
聊天室
STM32电视聊天室
论坛