zhange
发表于 2024-5-26 05:43:17
12.上个帖子被审核了
void huoqutianqi(void)
{
//k780成功
Uart3SendStr("AT+RST\r\n");
Delay1000ms();
wptr=0;
Uart4SendStr(buffer);
memset(buffer,'\0', sizeof(buffer));
Uart4SendStr("01rst\r\n");
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Delay1000ms();
Uart3SendStr("AT+CIPSTART=\"TCP\",\"域名\",80\r\n");//不懂得看下图 带网址发不出来
Delay1000ms();
wptr=0;
Uart4SendStr(buffer);
memset(buffer,'\0', sizeof(buffer));
Uart4SendStr("02lianjie\r\n");
Delay1000ms();
Uart3SendStr("AT+CWMODE=1\r\n");
Delay1000ms();
wptr=0;
Uart4SendStr(buffer);
memset(buffer,'\0', sizeof(buffer));
Uart4SendStr("03lianjie-fuwuqi\r\n");
Delay1000ms();
Uart3SendStr("AT+CIPMODE=1\r\n"); //开启透传模式
Delay1000ms();
wptr=0;
Uart4SendStr(buffer);
memset(buffer,'\0', sizeof(buffer));
Uart4SendStr("04kaiqi-touchuan\r\n");
Delay1000ms();
Uart3SendStr("AT+CIPSEND\r\n");
Delay1000ms();
wptr=0;
Uart4SendStr(buffer);
memset(buffer,'\0', sizeof(buffer));
Uart4SendStr("05-kaishi\r\n");
Uart3SendStr("GET 天气获取网址\r\n");//不懂得看下图 带网址发不出来
Delay1000ms();
Uart4SendStr(buffer);
Uart4SendStr("06-wangzhi\r\n");
Delay1000ms();
Delay1000ms();
Delay1000ms();
}
zhange
发表于 2024-5-26 05:44:49
12.续集图
和12步骤对比下我把key打了马赛克了
zhange
发表于 2024-5-26 05:54:28
13.放到主函数测试频率选择11.0592
电脑打开对应端口不是usb哪个我是用usb转串口 连接的
测试结果
下面开始截取字符串
zhange
发表于 2024-5-26 07:00:44
14.截取字符串用到了jsmn库
网上有教程 有点少基本上都是cjson的
我是先学的cjson c51搞不定(可能是我菜) 又学的jsmn 还行吧 也算简单
这俩货我学了一天
推荐个学习地址:
基本原理:
jsmn 将每一个 json 数据段都抽象为一个 token:一定要明白每个token,方便获取。
比如:看我的图吧1 2 3 获取的时候减去1为0 1 2
再举个例子一层一层的 获取
我已经得到数据
下一步把数据处理下
zhange
发表于 2024-5-26 07:02:47
15.格式化json代码
Delay1000ms();
r = jsmn_parse (&p, buffer, strlen (buffer), t, sizeof (t) / sizeof (t));//r 一定要放到获取到buffer后边
for(xunhuan = 0; xunhuan <= r ; xunhuan++)
{
name_len = t.end - t.start;
if (name_len < sizeof(fafa) - 1)
{ // 确保不会缓冲区溢出
strncpy(fafa, (buffer + t.start), name_len);
fafa = '\0'; // 添加字符串终止符
}else
{
strncpy(fafa, "taidale", 7);
fafa = '\0'; // 添加字符串终止符
}
Uart4SendStr("\r\n === \r\n");
Delay1000ms();
Uart4SendStr(fafa);
Delay1000ms();
Uart4SendStr("\r\n === \r\n");
}
zhange
发表于 2024-5-26 07:04:31
16.jsmn别人分享的程序你可以在里边获取到jsmn的头和主程序不用去外网下载了 我就是用的他的
亲测可用我就是用这个学习的。。。。。。{:5_294:}
zhange
发表于 2024-5-26 08:32:26
17.是时候添加上屏幕了
把获取的当天天气情况显示出来
完美就是没加字库有点乱
下一步 整理需要的字库 格式化输出
soma
发表于 2024-5-26 09:00:05
值得借鉴学习
zhange
发表于 2024-5-26 14:52:07
18.白天天气代码参考
//白天
name_len = t.end - t.start;
if (name_len < sizeof(fafa) - 1)
{ // 确保不会缓冲区溢出
strncpy(fafa, (buffer + t.start), name_len);
fafa = '\0'; // 添加字符串终止符
}
num = atoi(fafa);
if (num == 0 | num == 1)
{
dtbaitian = qing;
}else if(num == 4 | num == 5 | num == 6 | num == 7 | num == 8)
{
dtbaitian = duoyun;
}else if( num == 9 )
{
dtbaitian = yin;
}else if(num == 10 | num == 11 | num == 12 | num == 13 | num == 14 | num == 15 | num == 16 | num == 17 | num == 18 | num == 19 | num == 20)
{
dtbaitian = yu;
}else if(num == 21 | num == 22 | num == 23 | num == 24 | num == 25 )
{
dtbaitian = xue;
}else if(num == 30 | num == 31 )
{
dtbaitian = wumai;
}else if(num == 32 | num == 33 | num == 34 | num == 35 | num == 36 )
{
dtbaitian = feng;
}else if(num == 37)
{
dtbaitian = leng;
}else if(num == 38)
{
dtbaitian = re;
}
zhange
发表于 2024-5-26 14:52:43
19.晚上天气代码参考
//yewan
name_len = t.end - t.start;
if (name_len < sizeof(fafa) - 1)
{ // 确保不会缓冲区溢出
strncpy(fafa, (buffer + t.start), name_len);
fafa = '\0'; // 添加字符串终止符
}
num = atoi(fafa);
if (num == 0 | num == 1)
{
dtyewan = yqing;
}else if(num == 4 | num == 5 | num == 6 | num == 7 | num == 8)
{
dtyewan = yduoyun;
}else if( num == 9 )
{
dtyewan = yyin;
}else if(num == 10 | num == 11 | num == 12 | num == 13 | num == 14 | num == 15 | num == 16 | num == 17 | num == 18 | num == 19 | num == 20)
{
dtyewan = yyu;
}else if(num == 21 | num == 22 | num == 23 | num == 24 | num == 25 )
{
dtyewan = yxue;
}else if(num == 30 | num == 31 )
{
dtyewan = ywumai;
}else if(num == 32 | num == 33 | num == 34 | num == 35 | num == 36 )
{
dtyewan = yfeng;
}else if(num == 37)
{
dtyewan = yleng;
}else if(num == 38)
{
dtyewan = yre;
}