990|2

64

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第1期】第三帖 连接网络获取天气预报 [复制链接]

 

今天再更一期链接网络获取天气预报,也是跟着大佬步骤走

第一步是连接WiFi,我们可以通过Micropython库中的network和socket库实现Wi-Fi连接并获取IP地址。

我们需要使用pycopy_upip库安装network库,然后通过network.WLAN类,使用WLAN.STA模式连接Wi-Fi接入点,并使用socket库实现TCP/IP通信。

第二部获取天气预报。
可以使用Python的requests库(需要安装)访问天气预报API,然后解析返回的JSON数据。天气预报服务提供商的API可以提供当前天气、未来几天的天气和其他相关信息。我们这里使用高德的接口,然后使用Micropython库中的urllib库和JSON库来连接API并解析数据。

第三步因为我的oled有点问题,有需要的可以参照这个办法显示出来。
我们可以使用Pico W的SSD1306 OLED屏幕显示天气预报信息。我们可以使用Micropython的GPIO库来控制OLED屏幕,并使用SSD1306库来处理图形和字符。在OLED屏幕上,可以显示当前天气、温度、湿度、气压等等信息,以及未来几天的天气趋势。

由于考虑定位问题,这里直接通过网络获取公网IP,查询所在城市,在通过高德的接口获取到城市代码,从而实现自动获取所在地区的天气。

 

以下是代码:

 

import network
import socket
from time import sleep
from picozero import pico_temp_sensor, pico_led
import machine
import ubinascii
import urequests
import ujson

from machine import Pin

import time

from machine import PWM

from machine import I2C

from ssd1306 import SSD1306_I2C

ssid = '汤圆和奶茶'
password = 'tangyuan888'


TEMP = "12"
HUMI = "13"

def connect():
    #Connect to WLAN
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(ssid, password)
    while wlan.isconnected() == False:
        print('Waiting for connection...')
        sleep(1)
    print(wlan.ifconfig())
    ip = wlan.ifconfig()[0]
    print(f'Connected on {ip}')

def open_socket():
    ip = urequests.get('http://ip.42.pl/raw')
    
    ip_str = ip.content.decode('ascii')
    print(ip_str)
    ip.close()
    
    str_data = 'https://restapi.amap.com/v3/ip?ip='+ip_str+'&output=JSON&key=1e459c41f6b32822efa6442e74ca09c0'
    city = urequests.get(str_data)
    
    city_str = city.content.decode('ascii')
    #print(city_str)
    parsed_city = ujson.loads(city_str)
    
    adcode = parsed_city["adcode"]
    city.close()
    r = urequests.get('https://restapi.amap.com/v3/weather/weatherInfo?key=1e459c41f6b32822efa6442e74ca09c0&city='+adcode)
    w_str = r.content.decode('ascii')
    print(r.text)
    #print(w_str)
    parsed_w = ujson.loads(w_str)
    #print (parsed_w)
    #w_f = parsed_w["temperature"]
    temp_str = parsed_w["lives"][0]["temperature_float"]
    humi_str = parsed_w["lives"][0]["humidity_float"]
    global TEMP
    TEMP = temp_str
    global HUMI
    HUMI = humi_str
    #print(parsed_w["lives"][0]["temperature"])
    print (temp_str)
    print (humi_str)
    
    #print (parsed_wf)
    r.close()
    
WIDTH  = 128                            

HEIGHT = 64

i2c = I2C(1)

#oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)


try:
    connect()
    open_socket()
    while True:
        time.sleep(0.1)
        #oled.fill(0)
        TEMP_disp = "temp:"+TEMP
        #oled.text(TEMP_disp,5,10)
        HUMI_disp = "humi:"+HUMI
        #oled.text(HUMI_disp,5,30)

        #oled.show()
except KeyboardInterrupt:
    machine.reset()

现象如下:

 

最新回复

[attach]699084[/attach]  代码可以通过编辑菜单最后的一个代码功能添加哦。这样看上去会更整齐     详情 回复 发表于 2023-5-22 09:00
点赞 关注
 
 

回复
举报

6587

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

oled显示问题的这个办法进行显示出来,这个方法不错

 
 
 

回复

1万

帖子

2854

TA的资源

管理员

板凳
 

  代码可以通过编辑菜单最后的一个代码功能添加哦。这样看上去会更整齐  

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

玩板看这里:

https://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表