{"id":3030,"date":"2023-02-05T21:44:59","date_gmt":"2023-02-05T12:44:59","guid":{"rendered":"https:\/\/www.pinewell.jp\/wordpress\/?p=3030"},"modified":"2023-02-05T21:44:59","modified_gmt":"2023-02-05T12:44:59","slug":"rasberrypi-pico%e3%81%a7%e3%81%ae%e6%b0%b4%e6%b8%a9%e8%a8%88%e4%bd%9c%e6%88%90-%e3%81%9d%e3%81%ae%ef%bc%92","status":"publish","type":"post","link":"http:\/\/www.pinewell.jp\/wordpress\/?p=3030","title":{"rendered":"RasberryPi Pico\u3067\u306e\u6c34\u6e29\u8a08\u4f5c\u6210 \u305d\u306e\uff12"},"content":{"rendered":"\n<p>DS18B20\u306e\u53d6\u5f97\u306fOneWire\u3092\u4f7f\u3046\u30681\u3064\u306eGPIO\u3067\u53d6\u5f97\u3067\u304d\u308b\u3002<\/p>\n\n\n\n<p>\u5468\u308a\u306e\u660e\u308b\u3055\u3067\u8f1d\u5ea6\u3092\u8abf\u6574\u3057\u305f\u304b\u3063\u305f\u306e\u3067\u3001\u3044\u3064\u8cb7\u3063\u305f\u306e\u304b\u3082\u308f\u304b\u3089\u306a\u3044\u30bb\u30f3\u30b5\u30fc\u3092\u63a5\u7d9a\u3057\u305f\u3002<\/p>\n\n\n\n<p>I2C\u3067RTC\u3002DS1307\u3092\u7528\u3044\u305f\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">from machine import Pin, SPI,I2C,PWM\r\nimport gc9a01py as gc9a01\r\nimport onewire, ds18x20\r\nimport time,utime\r\n\r\nfrom ds1307 import DS1307\r\n\r\n# from fonts import vga1_8x8 as font\r\n# from fonts import vga2_8x8 as font\r\n# from fonts import vga1_8x16 as font\r\n# from fonts import vga2_8x16 as font\r\n# from fonts import vga1_16x16 as font\r\n# from fonts import vga1_bold_16x16 as font\r\n# from fonts import vga2_16x16 as font\r\n# from fonts import vga2_bold_16x16 as font\r\n# from fonts import vga1_16x32 as font\r\n# from fonts import vga1_bold_16x32 as font\r\n# from fonts import vga2_16x32 as font\r\n# from fonts import vga2_bold_16x32 as font\r\n# from fonts import vga2_bold_16x32 as fontB\r\n# from truetype import NotoSerif_32 as fontC\r\n\r\nfrom fonts import vga2_8x16 as fontA\r\nfrom fonts import vga2_16x32 as fontB\r\n\r\n\r\ndef main():\r\n    modePin=21  #\u6642\u523b\u5408\u308f\u305b\u30e2\u30fc\u30c9\u306b\u79fb\u884c\u30b9\u30a4\u30c3\u30c1\r\n    upPin=20    #\u65e5\u4ed8\u30fb\u6642\u8a08\u3042\u308f\u305b\u306e\u30a2\u30c3\u30d7\u30b9\u30a4\u30c3\u30c1\r\n\r\n    cds = machine.ADC(0) #\u660e\u308b\u3055\u30bb\u30f3\u30b5\u30fc\r\n    # 16bit\u306e\u6570\u5024\u4e00\u5358\u4f4d\u3067\u306e\u96fb\u5727\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\r\n    unit = 0.00005035477\r\n    \r\n    kurai = 20000  #\u6697\u3044\u3068\u304d\r\n    akarui = 65535 #\u660e\u308b\u3044\u3068\u304d\r\n    \r\n    mode    = 0   #0:\u901a\u5e38 1:\u6642\u8a08\u5408\u308f\u305b \r\n    sec     = 0  #\u6642\u8a08\u5408\u308f\u305b\u306e\u6642\u306e\u30bb\u30af\u30b7\u30e7\u30f3 0:Year 1:month 2 day 3 hour 4 minute \r\n    uYear   = 0  #\u6642\u8a08\u3042\u308f\u305b\u3088\u3046\u306e\u5024\r\n    uMonth  = 0\r\n    uDate   = 0\r\n    uHour   = 0\r\n    uMinute = 0\r\n\r\n    swMode = machine.Pin(modePin,machine.Pin.IN,machine.Pin.PULL_DOWN) #\u30b9\u30a4\u30c3\u30c1\u306e\u5b9a\u7fa9\r\n    swUp   = machine.Pin(upPin,machine.Pin.IN,machine.Pin.PULL_DOWN)   #\u30b9\u30a4\u30c3\u30c1\u306e\u5b9a\u7fa9\r\n\r\n    pushStart =0 #\u62bc\u3057\u59cb\u3081\u305f\u6642\u9593\r\n    flgPush = False #\u62bc\u3057\u3066\u3044\u308b\u304b\r\n    pushInt = 0 #\u62bc\u3055\u308c\u3066\u3044\u305f\u6642\u9593\r\n\r\n    DSPIN = 19 #\u6e29\u5ea6\u8a08\u306ePin\u3002onewire\r\n    dsCnt = 0  #\u6e29\u5ea6\u8a08\u306e\u6570\r\n    ds_pin = machine.Pin(DSPIN)\r\n    ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin)) #\u6e29\u5ea6\u8a08\u3092\u5b9a\u7fa9\r\n    \r\n    pw33 = machine.Pin(18,machine.Pin.OUT)   #RTC\u306e3.3V\u3092\u5f97\u308b\u305f\u3081\r\n    pw33.value(1)\r\n    \r\n    tokei=True #RTC\u304c\u53d6\u5f97\u3067\u304d\u305f\u304b\uff1f\r\n    \r\n    try:\r\n      i2c_rtc = I2C(0,scl = Pin(17),sda = Pin(16),freq = 100000) #RTC\u306e\u5b9a\u7fa9\r\n      result = I2C.scan(i2c_rtc)\r\n      #print(result)\r\n\r\n      rtc = DS1307(i2c_rtc)\r\n      #print(rtc.datetime())\r\n      (year,month,date,day,hour,minute,second,p1)=rtc.datetime()\r\n      \r\n      if year==2000:#\u521d\u671f\u6642\u306f2000\u5e74\u3068\u306a\u308b\u306e\u3067\u305d\u306e\u5834\u5408\u306b 2023\/2\/2 12:00:00\u306b\u8a2d\u5b9a\r\n          year = 2023\r\n          month = 2 \r\n          date = 2 \r\n          day = 4 \r\n          hour = 12\r\n          minute = 0\r\n          second = 0\r\n        \r\n          now = (year,month,date,day,hour,minute,second,0)\r\n          rtc.datetime(now)\r\n    except:\r\n        #print(\"not Tokei\")  #RTC\u304c\u53d6\u5f97\u3067\u304d\u306a\u304b\u3063\u305f\u3089 tokei\u975e\u8868\u793a\r\n        tokei=False\r\n        \r\n    o_ds = bytearray(b'(?\\x9b8\/!\\x01\\xd4') #\u6e29\u5ea6\u8a08\u306e\u500b\u4f53\u3092\u7279\u5b9a \u5916\u6c17\u6e29\r\n    w_ds = bytearray(b'(\\x07\\x83t\/!\\x01(') #                 \u6c34\u6e29\r\n\r\n    try:\r\n        roms = ds_sensor.scan()  #\u30bb\u30f3\u30b5\u30fc\u3092\u53d6\u5f97\r\n        dsCnt=len(roms)          #\u30bb\u30f3\u30b5\u30fc\u6570\u3092\u5f97\u308b\r\n        for rom in roms:\r\n            print('Found DS devices: ', rom)\r\n    except:\r\n        dsCnt = 0\r\n    \r\n    #\u6db2\u6676\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u306e\u5b9a\u7fa9\r\n    spi = SPI(1, baudrate=60000000, sck=Pin(10), mosi=Pin(11))\r\n    #tft = gc9a01.GC9A01( \r\n    #    spi,\r\n    #    dc=Pin(8, Pin.OUT),\r\n    #    cs=Pin(9, Pin.OUT),\r\n    #    reset=Pin(12, Pin.OUT),\r\n    #    backlight=Pin(25, Pin.OUT),\r\n    #    rotation=0)\r\n    tft = gc9a01.GC9A01(#\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u306fPWM\u3067\u8abf\u6574\u3059\u308b\u306e\u3067\u6307\u5b9a\u3057\u306a\u3044\u3002\r\n        spi,\r\n        dc=Pin(8, Pin.OUT),\r\n        cs=Pin(9, Pin.OUT),\r\n        reset=Pin(12, Pin.OUT),\r\n        rotation=0)\r\n    \r\n    \r\n    #\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u306fPWM\u3067\u8abf\u6574\r\n    pwm = PWM(Pin(25))\r\n    pwm.freq(1000)\r\n    pwm.duty_u16(akarui)\r\n    #pwm.duty_u16(20000)\r\n\r\n    tft.fill(gc9a01.WHITE)\r\n    tft.fill_rect(0,0,240,60,gc9a01.RED)\r\n    tft.text(fontB,\"HONDA\",80,20,gc9a01.WHITE,gc9a01.RED)\r\n              \r\n    while True:\r\n        for i in range(100): #\u30d0\u30c3\u30af\u30e9\u30a4\u30c8\u306e\u660e\u308b\u3055\u8abf\u6574\r\n            # ADC\u306e\u5024\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059(16bit\u306e\u751f\u306e\u6570\u5024)\r\n            voltRaw = cds.read_u16()\r\n            #print(\"voltRaw:\" + str(voltRaw))\r\n            volt = voltRaw * unit\r\n            #print( \"volt:\" + \"{:.3f}\".format(volt))\r\n        if volt > 2:\r\n            pwm.duty_u16(kurai)\r\n        else:\r\n            pwm.duty_u16(akarui)\r\n \r\n        #\u30e2\u30fc\u30c9\u30b9\u30a4\u30c3\u30c1\u304c\u62bc\u3055\u308c\u3066\u3044\u308b\u304b\uff1f\r\n        if swMode.value() == 1:\r\n            if flgPush :\r\n                pushInt = time.time()-pushStart\r\n            else:\r\n                flgPush = True\r\n                pushStart = time.time()\r\n                pushInt = 0\r\n        else:\r\n            if flgPush :# \u3059\u3067\u306b\u62bc\u3055\u308c\u3066\u3044\u3066\u96e2\u3057\u305f\r\n                flgPush=False\r\n                pushInt=time.time()-pushStart\r\n                if pushInt > 2: #\u9577\u62bc\u3057\u3055\u308c\u305f\r\n                    #print(\"long\") \r\n                    if mode ==0: #\u6642\u8a08\u5408\u308f\u305b\u30e2\u30fc\u30c9\u306b\u79fb\u884c\r\n                        (uYear,uMonth,uDate,day,uHour,uMinute,second,p1)=rtc.datetime() #\r\n                        mode=1\r\n                        sec=0\r\n                    else:   #\u6642\u8a08\u5408\u308f\u305b\u30e2\u30fc\u30c9\u3067\u9577\u62bc\u3057\r\n                        if sec == 4:#\u5206\u307e\u3067\u8a2d\u5b9a\u3057\u3066\u305f\u3089\u6642\u8a08\u5408\u308f\u305b\u7d42\u4e86\r\n                            now = (uYear,uMonth,uDate,0,uHour,uMinute,0,0)\r\n                            rtc.datetime(now)\r\n                            sec=0\r\n                            mode=0\r\n                        else:#\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3078\u79fb\u884c\r\n                            sec=sec+1\r\n                else:\r\n                    print(\"short\") #\u77ed\u62bc\u3057\u306f\u306a\u306b\u3082\u3057\u306a\u3044\r\n\r\n        if swUp.value() == 1:\r\n            if mode == 0: \r\n                (year,month,date,day,hour,minute,second,p1)=rtc.datetime()\r\n                print(str(year)+\"\/\"+str(month)+\"\/\"+str(date) + \"  \" + str(hour)+\":\"+str(minute)+\":\"+str(second))\r\n            else:\r\n                if sec ==0:\r\n                    uYear=uYear+1\r\n                    if uYear>2100:\r\n                        uYear=2023\r\n                elif sec ==1:\r\n                    uMonth=uMonth+1\r\n                    if uMonth>12:\r\n                        uMonth=1\r\n                elif sec ==2:\r\n                    uDate=uDate+1\r\n                    if uDate>31:\r\n                        uDate=1\r\n                elif sec ==3:\r\n                    uHour=uHour+1\r\n                    if uHour>23:\r\n                        uHour=0\r\n                elif sec ==4:\r\n                    uMinute=uMinute+1\r\n                    if uMinute>59:\r\n                        uMinute=0\r\n                #print(str(uYear)+\"\/\"+str(uMonth)+\"\/\"+str(uDate) + \"  \" + str(uHour)+\":\"+str(uMinute)+\":00\")\r\n\r\n        #\u6e29\u5ea6\u306e\u53d6\u5f97\r\n        oTemp = 999.99\r\n        wTemp = 999.99\r\n        if dsCnt > 0 :\r\n            ds_sensor.convert_temp()\r\n            for rom in roms:\r\n                if rom == o_ds :\r\n                    oTemp = ds_sensor.read_temp(rom)\r\n                else :\r\n                    wTemp = ds_sensor.read_temp(rom)\r\n        \r\n        # \u6e29\u5ea6\u306e\u8868\u793a\r\n        tft.text(fontA,\"WaterTemp\",50,62,gc9a01.BLACK,gc9a01.WHITE)\r\n        tft.text(fontB,\"{:.2f}\".format(wTemp),100,80,gc9a01.BLACK,gc9a01.WHITE)\r\n        tft.text(fontA,\"OutTemp\",50,122,gc9a01.BLACK,gc9a01.WHITE)\r\n        tft.text(fontB,\"{:.2f}\".format(oTemp),100,140,gc9a01.BLACK,gc9a01.WHITE)\r\n\r\n        \r\n        if mode ==0: #\u901a\u5e38\u8868\u793a\r\n            if tokei :\r\n                (year,month,date,day,hour,minute,second,p1)=rtc.datetime()\r\n        \r\n                dateStr = \"{0:04d}\/ {1:02d}\/ {2:02d}\".format(year,month,date)\r\n                tft.text(fontA,dateStr,85,190,gc9a01.BLACK,gc9a01.WHITE)\r\n                timeStr = \"{0:02d}:{1:02d}:{2:02d}\".format(hour,minute,second)\r\n                tft.text(fontA,timeStr,92 ,208,gc9a01.BLACK,gc9a01.WHITE)\r\n                tft.text(fontA,\"      \",85 ,174,gc9a01.BLACK,gc9a01.WHITE)\r\n                \r\n        else: #\u6642\u8a08\u5408\u308f\u305b\r\n            dateStr = \"{0:04d}\/ {1:02d}\/ {2:02d}\".format(uYear,uMonth,uDate)\r\n            tft.text(fontA,dateStr,85,190,gc9a01.BLACK,gc9a01.WHITE)\r\n            timeStr = \"{0:02d}:{1:02d}:00\".format(uHour,uMinute)\r\n            tft.text(fontA,timeStr,92 ,208,gc9a01.BLACK,gc9a01.WHITE)\r\n            if sec ==0:\r\n                tft.text(fontA,\"year  \",85 ,174,gc9a01.BLACK,gc9a01.WHITE)\r\n            elif sec ==1:\r\n                tft.text(fontA,\"month \",85 ,174,gc9a01.BLACK,gc9a01.WHITE)\r\n            elif sec ==2:\r\n                tft.text(fontA,\"date  \",85 ,174,gc9a01.BLACK,gc9a01.WHITE)\r\n            elif sec ==3:\r\n                tft.text(fontA,\"hour  \",85 ,174,gc9a01.BLACK,gc9a01.WHITE)\r\n            elif sec ==4:\r\n                tft.text(fontA,\"minute\",85 ,174,gc9a01.BLACK,gc9a01.WHITE)\r\nmain()\r\n<\/code><\/pre>\n\n\n\n<p>\u3053\u308c\u3067\u30b9\u30a4\u30c3\u30c12\u500b\u3067\u5916\u6c17\u6e29\u3001\u6c34\u6e29\u3001\u6642\u8a08\u3068\u7167\u5ea6\u8a08\u3092\u7528\u3044\u305f\u6c34\u6e29\u8a08\u304c\u5b9f\u73fe\u3067\u304d\u308b\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>DS18B20\u306e\u53d6\u5f97\u306fOneWire\u3092\u4f7f\u3046\u30681\u3064\u306eGPIO\u3067\u53d6\u5f97\u3067\u304d\u308b\u3002 \u5468\u308a\u306e\u660e\u308b\u3055\u3067\u8f1d\u5ea6\u3092\u8abf\u6574\u3057\u305f\u304b\u3063\u305f\u306e\u3067\u3001\u3044\u3064\u8cb7\u3063\u305f\u306e\u304b\u3082\u308f\u304b\u3089\u306a\u3044\u30bb\u30f3\u30b5\u30fc\u3092\u63a5\u7d9a\u3057\u305f\u3002 I2C\u3067RTC\u3002DS1307\u3092\u7528\u3044\u305f\u3002 \u3053\u308c\u3067\u30b9\u30a4\u30c3\u30c12\u500b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-3030","post","type-post","status-publish","format-standard","hentry","category-2"],"views":955,"_links":{"self":[{"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3030"}],"version-history":[{"count":2,"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3030\/revisions"}],"predecessor-version":[{"id":3032,"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3030\/revisions\/3032"}],"wp:attachment":[{"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3030"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.pinewell.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}