149 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # /***************************************************************************** | ||
|  | # * | File        :	  epdconfig.py | ||
|  | # * | Author      :   Waveshare electrices | ||
|  | # * | Function    :   Hardware underlying interface | ||
|  | # * | Info        : | ||
|  | # *---------------- | ||
|  | # * |	This version:   V1.0 | ||
|  | # * | Date        :   2019-11-01 | ||
|  | # * | Info        :    | ||
|  | # ******************************************************************************/ | ||
|  | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||
|  | # of this software and associated documnetation files (the "Software"), to deal | ||
|  | # in the Software without restriction, including without limitation the rights | ||
|  | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
|  | # copies of the Software, and to permit persons to  whom the Software is | ||
|  | # furished to do so, subject to the following conditions: | ||
|  | # | ||
|  | # The above copyright notice and this permission notice shall be included in | ||
|  | # all copies or substantial portions of the Software. | ||
|  | # | ||
|  | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
|  | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
|  | # FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
|  | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
|  | # LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
|  | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
|  | # THE SOFTWARE. | ||
|  | # | ||
|  | import RPi.GPIO as GPIO | ||
|  | import time | ||
|  | import os | ||
|  | import logging | ||
|  | import sys | ||
|  | 
 | ||
|  | from ctypes import * | ||
|  | 
 | ||
|  | EPD_SCK_PIN   =11 | ||
|  | EPD_MOSI_PIN  =10 | ||
|  | 
 | ||
|  | EPD_M1_CS_PIN  =8 | ||
|  | EPD_S1_CS_PIN  =7 | ||
|  | EPD_M2_CS_PIN  =17 | ||
|  | EPD_S2_CS_PIN  =18 | ||
|  | 
 | ||
|  | EPD_M1S1_DC_PIN  =13 | ||
|  | EPD_M2S2_DC_PIN  =22 | ||
|  | 
 | ||
|  | EPD_M1S1_RST_PIN =6 | ||
|  | EPD_M2S2_RST_PIN =23 | ||
|  | 
 | ||
|  | EPD_M1_BUSY_PIN  =5 | ||
|  | EPD_S1_BUSY_PIN  =19 | ||
|  | EPD_M2_BUSY_PIN  =27 | ||
|  | EPD_S2_BUSY_PIN  =24 | ||
|  | 
 | ||
|  | find_dirs = [ | ||
|  |     os.path.dirname(os.path.realpath(__file__)), | ||
|  |     '/usr/local/lib', | ||
|  |     '/usr/lib', | ||
|  | ] | ||
|  | spi = None | ||
|  | for find_dir in find_dirs: | ||
|  |     so_filename = os.path.join(find_dir, 'epd_12_in_48_lib.so') | ||
|  |     if os.path.exists(so_filename): | ||
|  |         spi = CDLL(so_filename) | ||
|  |         break | ||
|  | if spi is None: | ||
|  |     RuntimeError('Cannot find epd_12_in_48_lib.so') | ||
|  | 
 | ||
|  | 
 | ||
|  | def digital_write(pin, value): | ||
|  |     GPIO.output(pin, value) | ||
|  | 
 | ||
|  | def digital_read(pin): | ||
|  |     return GPIO.input(pin) | ||
|  | 
 | ||
|  | def spi_writebyte(value):  | ||
|  |     spi.DEV_SPI_WriteByte(value) | ||
|  |   | ||
|  | def delay_ms(delaytime): | ||
|  |     time.sleep(delaytime / 1000.0) | ||
|  |          | ||
|  | def module_init(): | ||
|  |     GPIO.setmode(GPIO.BCM) | ||
|  |     GPIO.setwarnings(False) | ||
|  |     GPIO.setup(EPD_SCK_PIN, GPIO.OUT)     | ||
|  |     GPIO.setup(EPD_MOSI_PIN, GPIO.OUT) | ||
|  |      | ||
|  |     logging.debug("python call wiringPi Lib") | ||
|  |      | ||
|  |     GPIO.setup(EPD_M2S2_RST_PIN, GPIO.OUT)     | ||
|  |     GPIO.setup(EPD_M1S1_RST_PIN, GPIO.OUT) | ||
|  |     GPIO.setup(EPD_M2S2_DC_PIN, GPIO.OUT) | ||
|  |     GPIO.setup(EPD_M1S1_DC_PIN, GPIO.OUT) | ||
|  |     GPIO.setup(EPD_S1_CS_PIN, GPIO.OUT) | ||
|  |     GPIO.setup(EPD_S2_CS_PIN, GPIO.OUT) | ||
|  |     GPIO.setup(EPD_M1_CS_PIN, GPIO.OUT) | ||
|  |     GPIO.setup(EPD_M2_CS_PIN, GPIO.OUT) | ||
|  | 
 | ||
|  |     GPIO.setup(EPD_S1_BUSY_PIN, GPIO.IN) | ||
|  |     GPIO.setup(EPD_S2_BUSY_PIN, GPIO.IN) | ||
|  |     GPIO.setup(EPD_M1_BUSY_PIN, GPIO.IN) | ||
|  |     GPIO.setup(EPD_M2_BUSY_PIN, GPIO.IN) | ||
|  |      | ||
|  |     digital_write(EPD_M1_CS_PIN, 1) | ||
|  |     digital_write(EPD_S1_CS_PIN, 1) | ||
|  |     digital_write(EPD_M2_CS_PIN, 1) | ||
|  |     digital_write(EPD_S2_CS_PIN, 1) | ||
|  |      | ||
|  |     digital_write(EPD_M2S2_RST_PIN, 0) | ||
|  |     digital_write(EPD_M1S1_RST_PIN, 0) | ||
|  |     digital_write(EPD_M2S2_DC_PIN, 1) | ||
|  |     digital_write(EPD_M1S1_DC_PIN, 1) | ||
|  | 
 | ||
|  |     spi.DEV_ModuleInit() | ||
|  | 
 | ||
|  | def module_exit(): | ||
|  |     digital_write(EPD_M2S2_RST_PIN, 0) | ||
|  |     digital_write(EPD_M1S1_RST_PIN, 0) | ||
|  |     digital_write(EPD_M2S2_DC_PIN, 0) | ||
|  |     digital_write(EPD_M1S1_DC_PIN, 0) | ||
|  |     digital_write(EPD_S1_CS_PIN, 1) | ||
|  |     digital_write(EPD_S2_CS_PIN, 1) | ||
|  |     digital_write(EPD_M1_CS_PIN, 1) | ||
|  |     digital_write(EPD_M2_CS_PIN, 1) | ||
|  | 
 | ||
|  | def spi_readbyte(Reg): | ||
|  |     GPIO.setup(EPD_MOSI_PIN, GPIO.IN) | ||
|  |     j=0 | ||
|  |     # time.sleep(0.01) | ||
|  |     for i in range(0, 8): | ||
|  |         GPIO.output(EPD_SCK_PIN, GPIO.LOW)  | ||
|  |         # time.sleep(0.01)  | ||
|  |         j = j << 1  | ||
|  |         if(GPIO.input(EPD_MOSI_PIN) == GPIO.HIGH): | ||
|  |             j |= 0x01 | ||
|  |         else: | ||
|  |             j &= 0xfe  | ||
|  |         # time.sleep(0.01) | ||
|  |         GPIO.output(EPD_SCK_PIN, GPIO.HIGH)  | ||
|  |         # time.sleep(0.01)   | ||
|  |     GPIO.setup(EPD_MOSI_PIN, GPIO.OUT) | ||
|  |     return j  | ||
|  |      | ||
|  | def delay_ms(delaytime): | ||
|  |     time.sleep(delaytime / 1000.0) | ||
|  | 
 | ||
|  |    |