自制电子农历

news2024/11/24 17:27:43

水文大师上线。今天一水电子农历牌。

首先讲讲电子配件,一来是电子小屏幕的选择,遇到文字比较多的,尤其是汉字,不要选传统那款128x64 oled,绝对放不下(找到最牛的超小免费字体至少要在8pixel以上才能看清楚)。我选了ili9341,觉得趁手。

其次是室温不用api抓的当地天气,而是采用硬件测温,此处上ds18b20,我发现这玩意儿挺高级,管道测温,水下测温包个不锈钢,下去的也是这个模块,可见敏感度还是不错的,常温区间的精确度已经很高了,要注意它的协议是1-wire(即板子上要初始化w1-gpio)。

至于农历的相关信息,是api抓的。接下来发一发代码流水账。

#: cat ds18b20.py

from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor()

def modify_text(int_temp):
    with open('/home/nongLi/info_txt/ds18b20.txt', "r+") as f:
        read_data = f.read()
        f.seek(0)
        f.truncate()   #清空文件
        f.write(int_temp)


temperature = str(sensor.get_temperature()) + '\'C'
modify_text(temperature)
#: cat vcgencmd.py

import os

def temperature_of_raspberry_pi():
    cpu_temp = os.popen("vcgencmd measure_temp").read().splitlines()
    return str(cpu_temp[0].replace("temp=", ""))

def modify_text(int_temp):
    with open('/home/nongLi/info_txt/vcgencmd.txt', "r+") as f:
        read_data = f.read()
        f.seek(0)
        f.truncate()   #清空文件
        f.write(int_temp)

modify_text(temperature_of_raspberry_pi())
#: cat api_info.py
#nongLi: https://eolink.o.apispace.com/453456/lives_geo/v001/calendar?days=2
#HK红日:https://data.gov.hk/sc-data/dataset/hk-effo-statistic-cal
#室温:硬件测温-ds18b20
#cpu温度: vcgencmd

import os
import requests

def modify_text(int_temp):
    with open('/home/nongLi/info_txt/nongLi.txt', "r+") as f:
        read_data = f.read()
        f.seek(0)
        f.truncate()   #清空文件
        f.write(int_temp)

nongLi_url = "https://eolink.o.apispace.com/453456/lives_geo/v001/calendar"
payload = {"days":"2"}


headers = {
    "X-APISpace-Token": "buy it",
    "Authorization-Type":"apikey"
}

response=requests.request("GET", nongLi_url, params=payload, headers=headers)

#print(response.text)

modify_text(response.text)
#: cat txt_integration.py
import os
import json
from datetime import datetime

##农历文本整理
with open('info_txt/nongLi.txt','r') as load_f:
    load_dict = json.load(load_f)
target_dict = load_dict['result'][1]
target_date = datetime.strptime(str(target_dict['date']),'%Y-%m-%d')
txt1 = str(target_dict['date']) + "; " + str(target_dict["moreDetail"]["constellation"]) + "; " + str(target_dict['lunar']) + ' ' + str(target_dict["festival"]) + ' '
txt2 = str(target_dict['ganzhiYear']) + ' ' + str(target_dict['ganzhiMonth']) + ' ' + str(target_dict['ganzhiDay']) + ' '
txt3 = '纳音: ' + str(target_dict["moreDetail"]["elementYear"]) + " " + str(target_dict["moreDetail"]["elementMonth"]) + " " + str(target_dict["moreDetail"]["elementDay"]) + '\n'
txt4 = '彭祖百忌: ' + str(target_dict['moreDetail']['pzTaboo']) + '\n'
txt5 = '宜: ' + str(target_dict['fitting']) + '\n'
txt6 = '忌: ' + str(target_dict['taboo']) + '\n'
txt7 = '冲: ' + str(target_dict["moreDetail"]["chong"]) + '; ' + '煞: ' + str(target_dict["moreDetail"]["sha"]) + '\n'
txt8 = str(target_dict["solarTerm"]) + str(target_dict["stDays"]) + '天,' + str(target_dict["nextSt"]) + str(target_dict["nextstDays"]) + "天后。" + '\n'

##cpu温度整理
with open('/home/nongLi/info_txt/vcgencmd.txt','r') as temp_f:
    rpi_temp = temp_f.read()

##室温整理
with open('/home/nongLi/info_txt/ds18b20.txt','r') as f_temp:
    current_temp = f_temp.read()
txt1 = txt1 + current_temp + '\n'
txt2 = txt2 + rpi_temp + '\n'
txt9 = txt1 + txt2 + txt3 + txt4 + txt5 + txt6 + txt7 + txt8

##香港红日整理
def yyyymmdd_convertor(str_date):
    return datetime.strptime(str_date,'%Y%m%d')

with open("/home/nongLi/info_txt/hk_holidays.json",'r', encoding='utf-8-sig') as decode_f:
    holidays_dict = json.load(decode_f)
hk_list = holidays_dict['vcalendar'][0]['vevent']
hk_summary = ""
hk_flag = 0
for i in hk_list:

    first_date = yyyymmdd_convertor(i['dtstart'][0])
    last_date = yyyymmdd_convertor(i['dtend'][0])
    if target_date == first_date or target_date == last_date:
        #summary = i["summary"]
        hk_flag = 1
        break
    if target_date > first_date and target_date < last_date:
        #summary = i["summary"]
        hk_flag = 1
        break

if hk_flag == 1:
    final_text = txt9 + "港假"
elif hk_flag == 0:
    final_text = txt9
else:
    final_text = "Error Error Error!"

def modify_text(int_temp):
    with open('info_txt/display.txt', "r+") as f:
        read_data = f.read()
        f.seek(0)
        f.truncate()   #清空文件
        f.write(int_temp)

modify_text(final_text)
#: cat display_ili9341.py
import time
import busio
import digitalio
from board import SCK, MOSI, MISO, CE0, D24, D23

from adafruit_rgb_display import color565
import adafruit_rgb_display.ili9341 as ili9341
from PIL import Image,ImageDraw,ImageFont

# Configuration for CS and DC pins:
CS_PIN = CE0
DC_PIN = D24
RESET_PIN = D23

# Setup SPI bus using hardware SPI:
spi = busio.SPI(clock=SCK, MOSI=MOSI)

# Create the ILI9341 display:
disp = ili9341.ILI9341(spi,rotation=270,cs=digitalio.DigitalInOut(CS_PIN),
                          dc=digitalio.DigitalInOut(DC_PIN),rst=digitalio.DigitalInOut(RESET_PIN))

disp.fill(0)

width=disp.width
height=disp.height

# 文字显示
with open('/home/nongLi/info_txt/display.txt','r') as f:
    buffer_txt = f.read()
image1=Image.new('RGB',(height,width))
draw1=ImageDraw.Draw(image1)
font1=ImageFont.truetype('/home/nongLi/fonts/SimSun-special.ttf',12) #SimSun-Special save my day!
draw1.text((0,0),buffer_txt,font=font1,fill=color565(234,255,0))

try:
    disp.image(image1)
except Exception as e:
    print(e)
    disp.fill(0)
#: sudo crontab -e

0 1 * * * /usr/bin/python /home/nongLi/api_info.py  #凌晨1点取一次。
*/10 * * * * /usr/bin/python /home/nongLi/ds18b20_temp.py #每十分钟
*/10 * * * * /usr/bin/python /home/nongLi/vcgencmd.py
*/11 * * * * /usr/bin/python /home/nontLi/txt_integration.py
*/12 * * * * /usr/bin/python /home/nongLi/display_ili9341.py

大概得布局图如下,主要别忘了那个上拉电阻加到ds18b20的正极和数据线两端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861259.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内核裁剪与驱动编译

linux设备驱动以内核模块的形式出现&#xff0c;编写linux内核模块编程是学习linux设备驱动的先决条件。 在编译linux内核之前要先配置linux内核。每个板子都有其对应的默认配置文件&#xff0c;这些默认配置文件保存在arch/arm/configs 目录中。比如xilinx_zynq_defconfig作为…

图扑软件入选信通院《高质量数字化转型产品及服务全景图 (2023)》

7 月 27 日&#xff0c;由中国信通院主办的“2023 数字生态发展大会”暨中国信通院“铸基计划”年中会议在北京召开。本次大会重磅发布了《高质量数字化转型产品及服务全景图&#xff08;2023 上半年度&#xff09;》。图扑软件凭借自研 HT for Web 数字孪生可视化产品成功入选…

(C++)继承

目录 1.继承的概念及定义 1.1继承的概念 1.2继承定义 1.2.1定义格式 1.2.2继承方式和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6.继承与静态成员 7.复杂的菱形继承及菱形虚拟…

OSPF无法建立领居的原因有哪些(第三十五课)

1 配置OSPF 1.1 思路 1&#xff0c;配置IP地址 2&#xff0c;配置OSPF 配置进程号 route-id进入区域宣告网段 配置IP地址 R1路由表 ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 10 …

【LeetCode】55. 跳跃游戏 - 贪婪算法

目录标题 2023-8-10 16:27:05 55. 跳跃游戏 2023-8-10 16:27:05 class Solution {public boolean canJump(int[] nums) {int n nums.length;int arrivalLocation 0;for (int i 0; i < n; i) {if (i < arrivalLocation) {arrivalLocation Math.max(arrivalLocation,…

matplotlib 笔记 注释annotate

在图中的特定位置添加文本注释、箭头和连接线&#xff0c;以便更清晰地解释图形中的数据或信息 主要参数 text文本内容xy箭头指向的目标点的坐标xytext注释文本的坐标arrowprops 一个字典&#xff0c;指定注释箭头的属性&#xff0c;如颜色、箭头样式等 没有arrowprops的时候…

CentOS7安装MySQL8(RPM方式)

第一步&#xff1a;解压 tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar -C /usr/local/java/mysql 第二步&#xff1a;按顺序安装rpm包 # rpm -ivh mysql-community-common-8.0.34-1.el7.x86_64.rpm# rpm -ivh mysql-community-client-plugins-8.0.34-1.el7.x86_64.rpm…

layui 集成 ztree异步加载

首先&#xff0c;layui环境搭建&#xff0c;ztree环境引入 ztree的js和css都要引入&#xff0c;我这里暂时用的是core包> 静态&#xff0c;一句话就够了 <!-- 左侧菜单树形组件 --><div class"layui-col-md3"><div class"layui-footer "…

Leetcode 977. 有序数组的平方

题目&#xff1a; Leetcode 977. 有序数组的平方 描述&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序 思路&#xff1a; 双指针法 数组其实是有序的&#xff0c; 只不过负数平方之…

Gradio入门,并搭个鸡兔同笼问题小应用,附源码(MindOpt)

应用链接&#xff1a; https://979427749bc9ceec34.gradio.live 是公开访问链接&#xff0c;3天有效。在modelscope中的创空间怎么长期发布我还在研究。后面补上。 应用图如下&#xff0c;源代码见正文。 知道Gradio AI大模型快速生成应用的工具&#xff0c; 在Huggingface …

使用 Docker 部署 canal 服务实现MySQL和ES实时同步

参考 ClientAdapter: Canal的Adapter配置项目 Sync ES&#xff1a;Canal的Adapter中ES同步的配置项 使用 Docker 部署 canal 服务 docker canal-server canal-adapter mysql Canal&#xff08;基于Docker同步mysql数据到elasticsearch&#xff09; Canal部署过程中的错误 0. 环…

dns的负载分配是什么

DNS 负载分配是使用 DNS 系统对传入的网络流量进行分配的一种技术。这可以是基于多种策略来分配的&#xff0c;从简单的轮询到更复杂的基于地理位置或服务器健康状况的分配。下面是 DNS 负载分配的几种常见形式&#xff1a; 轮询&#xff08;Round Robin&#xff09;&#xff1…

【LeetCode】102. 二叉树的层序遍历、107. 二叉树的层序遍历 II

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 102. 二叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节…

详解双向带头循环链表

今天给大家分享的数据结构中的链表的双向带头循环链表结构&#xff01;听到这个链表大家可能心中一颤&#xff0c;其实他就是个纸老虎&#xff0c;看着比较难搞&#xff0c;实际上非常简单易懂&#xff0c;创建该结构链表的大佬可谓是真的牛&#xff0c;因为该结构比起单链表要…

Java课题笔记~ HTTP协议(请求和响应)

Servlet最主要的作用就是处理客户端请求&#xff0c;并向客户端做出响应。为此&#xff0c;针对Servlet的每次请求&#xff0c;Web服务器在调用service()方法之前&#xff0c;都会创建两个对象 分别是HttpServletRequest和HttpServletResponse。 其中HttpServletRequest用于封…

8.10论文阅读

文章目录 The multimodal MRI brain tumor segmentation based on AD-Net摘要本文方法损失函数 实验结果 max-vit - unet:多轴注意力医学图像分割摘要本文方法实验结果 The multimodal MRI brain tumor segmentation based on AD-Net 摘要 基于磁共振成像(MRI)的多模态胶质瘤…

SpringBoot笔记:SpringBoot 集成 Dataway 多数据源配置(二)

文章目录 前言核心代码和配置yml 配置注入多数据源常用Spi实现swagger 配置自定义 Udf指定数据源进行查询 前言 之前简单介绍了一下 Dataway 使用&#xff0c;本文继续介绍一下它的多数据源配置和使用。 核心代码和配置 yml 配置 # springboot多环境配置 #端口&#xff0c;…

SpringBoot中间件使用之EventBus、Metric、CommandLineRunner

1、EventBus 使用EventBus 事件总线的方式可以实现消息的发布/订阅功能&#xff0c;EventBus是一个轻量级的消息服务组件&#xff0c;适用于Android和Java。 // 1.注册事件通过 EventBus.getDefault().register(); // 2.发布事件 EventBus.getDefault().post(“事件内容”); …

【HarmonyOS】Java如何引用外部jar包

【关键字】 Java、引用jar包​ 【写在前面】 使用API6和API7开发HarmonyOS应用时&#xff0c;因为应用中只能引用SDK中开放的功能接口&#xff0c;但是部分jdk自带的接口功能在SDK中并未封装&#xff0c;要想在工程中使用jdk开放的接口功能&#xff0c;需要将jdk中的jar包通过…

【华秋干货铺】电源PCB设计汇总

在《PCB设计丨电源设计的重要性》一文中&#xff0c;已经介绍了电源设计的总体要求&#xff0c;以及不同电路的相关布局布线等知识点&#xff0c;那么本篇内容&#xff0c;小编将以RK3588为例&#xff0c;为大家详细介绍其他支线电源的PCB设计。 电源PCB设计 VDD_CPU_BIG0/1 …