857|2

650

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

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

 

Pico W是一款低成本的微控制器开发板,可用于物联网和嵌入式系统开发。要使用Pico W连接网络并获取天气预报,我们需要遵循以下步骤:
 1. 连接Wi-Fi: Pico W支持Wi-Fi连接,可以使用WebREPL或其他网络库实现与Wi-Fi接入点的通信。我们可以通过Micropython库中的network和socket库实现Wi-Fi连接并获取IP地址。首先,我们需要使用pycopy_upip库安装network库,然后通过network.WLAN类,使用WLAN.STA模式连接Wi-Fi接入点,并使用socket库实现TCP/IP通信。
 2. 获取天气预报: 在连接Wi-Fi之后,我们可以使用Python的requests库(需要安装)访问天气预报API,然后解析返回的JSON数据。天气预报服务提供商的API可以提供当前天气、未来几天的天气和其他相关信息。我们这里使用高德的接口,然后使用Micropython库中的urllib库和JSON库来连接API并解析数据。
 3. 显示天气预报: 在获取天气预报数据之后,我们可以使用Pico W的SSD1306 OLED屏幕显示天气预报信息。我们可以使用Micropython的GPIO库来控制OLED屏幕,并使用SSD1306库来处理图形和字符。在OLED屏幕上,可以显示当前天气、温度、湿度、气压等等信息,以及未来几天的天气趋势。
 通过以上步骤,我们可以使用Pico W连接网络并获取天气预报。需要注意的是,需要确保Pico W能够稳定连接Wi-Fi,并能及时获取和显示天气预报信息。

由于考虑定位问题,这里直接通过网络获取公网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 = 'ssid'
password = 'xxxxxx'


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()

最后实现的效果如下图:

最新回复

 连接网络获取天气预报之前,怎么和天气预报服务提供商的API对接呢   详情 回复 发表于 2023-5-21 08:35
点赞 关注
 
 

回复
举报

1701

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

 连接网络获取天气预报之前,怎么和天气预报服务提供商的API对接呢

点评

我用的高德的免费API,有兴趣可以看看,也有说明文档  详情 回复 发表于 2023-5-22 09:00
 
 
 

回复

650

帖子

8

TA的资源

纯净的硅(初级)

板凳
 
火辣西米秀 发表于 2023-5-21 08:35  连接网络获取天气预报之前,怎么和天气预报服务提供商的API对接呢

我用的高德的免费API,有兴趣可以看看,也有说明文档

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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