Open weiyshay opened 1 year ago
Asked in discord and got some feedback! Working on #2 to resolve the decorator issue.
https://discord.com/channels/574275045187125269/1148070474262249543/1148076745388474388
Hello!
no module pyb
The pyb module refers to the pyBoard, the very own MicroPython project hardware developped to showcasea many of MicroPython's aspects You would have to replace pyb by esp32 in the code examples you encounter, and sometimes adapt things a bit too
invalid micropython decorator
I think the @micropython.native decorator refers some method to speed-up a few functions by turning them into binary machine code rather than python bytecode (.mpy). This might be an optional feature, and maybe it is not enabled in the mpconfigport.h used to compile MicroPython, or maybe you just need import micropython.
no module ST7735
Is it something you are working on? I think you can push it through via mpremote yes
I comment out all the native decorators in the file and gave it a run and system crashed.
Diff:
--- s 2023-09-05 04:37:51.199898388 +0800
+++ ../../../GuyCarver/MicroPython/lib/ST7735.py 2023-09-03 23:48:04.368648368 +0800
@@ -1,15 +1,17 @@
-import machine as pyb
-from machine import Pin, SoftSPI, SPI
-import time
-import esp32
-import micropython
+#Driver for Sainsmart 1.8" tft display ST7735
+#Translated by Guy Carver from the ST7735 sample code.
+#Display uses SPI interface.
+
+#todo: Use const()
+
+import pyb
from math import sqrt
-#@micropython.native
+@micropython.native
def clamp( aValue, aMin, aMax ) :
return max(aMin, min(aMax, aValue))
-#@micropython.native
+@micropython.native
def TFTColor( aR, aG, aB ) :
'''Create a 16 bit rgb value from the given R,G,B from 0-255.
This assumes rgb 565 layout and will be incorrect for bgr.'''
@@ -100,17 +102,17 @@ class tft(object) :
'''Create a 565 rgb TFTColor value'''
return TFTColor(aR, aG, aB)
- def __init__( self, aLoc, aDC, aReset, aCS ) :
+ def __init__( self, aLoc, aDC, aReset ) :
'''aLoc SPI pin location is either 1 for 'X' or 2 for 'Y'.
aDC is the DC pin and aReset is the reset pin.'''
self._size = tft._SCREENSIZE
self.rotate = 0 #Vertical with top toward pins.
self._rgb = True #color order of rgb.
- self.dc = pyb.Pin(aDC, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
- self.reset = pyb.Pin(aReset, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
+ self.dc = pyb.Pin(aDC, pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN)
+ self.reset = pyb.Pin(aReset, pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN)
rate = 200000 #100000000 #Set way high but will be clamped to a maximum in SPI constructor.
cs = "X5" if aLoc == 1 else "Y5"
- self.cs = pyb.Pin(cs, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
+ self.cs = pyb.Pin(cs, pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN)
self.cs.high()
self.spi = pyb.SPI(aLoc, pyb.SPI.MASTER, baudrate = rate, polarity = 1, phase = 0, crc=None)
self.colorData = bytearray(2)
@@ -144,7 +146,7 @@ class tft(object) :
self._size =(self._size[1], self._size[0])
self._setMADCTL()
- #@micropython.native
+ @micropython.native
def pixel( self, aPos, aColor ) :
'''Draw a pixel at the given position'''
if 0 <= aPos[0] < self._size[0] and 0 <= aPos[1] < self._size[1]:
@@ -353,7 +355,7 @@ class tft(object) :
self.vline((aPos[0] + x, y0), ln, aColor)
self.vline((aPos[0] - x, y0), ln, aColor)
- def fill( self, aColor = _BLACK ) :
+ def fill( self, aColor = BLACK ) :
'''Fill screen with the given color.'''
self.fillrect((0, 0), self._size, aColor)
@@ -401,7 +403,7 @@ class tft(object) :
self._writecommand(_RAMWR) #Write to RAM.
- #@micropython.native
+ @micropython.native
def _writecommand( self, aCommand ) :
'''Write given command to the device.'''
self.dc.low()
@@ -409,7 +411,7 @@ class tft(object) :
self.spi.send(aCommand)
self.cs.high()
- #@micropython.native
+ @micropython.native
def _writedata( self, aData ) :
'''Write given data to the device. This may be
either a single int or a bytearray of values.'''
@@ -418,21 +420,21 @@ class tft(object) :
self.spi.send(aData)
self.cs.high()
- #@micropython.native
+ @micropython.native
def _pushcolor( self, aColor ) :
'''Push given color to the device.'''
self.colorData[0] = aColor >> 8
self.colorData[1] = aColor
self._writedata(self.colorData)
- #@micropython.native
+ @micropython.native
def _setMADCTL( self ) :
'''Set screen rotation and RGB/BGR format.'''
self._writecommand(_MADCTL)
rgb = _TFTRGB if self._rgb else _TFTBGR
self._writedata(tft._TFTRotations[self.rotate] | rgb)
- #@micropython.native
+ @micropython.native
def _reset( self ) :
'''Reset the device.'''
self.dc.low()
@@ -637,7 +639,7 @@ class tft(object) :
#
# self.cs.high()
- #@micropython.native
+ @micropython.native
def initg( self ) :
'''Initialize a green tab version.'''
self._reset()
@@ -746,27 +748,3 @@ class tft(object) :
# t.initg()
## t.fill(0)
# return t
-
-# 由于ftf屏的颜色有问题,因此需要重写一个函数修复一下
-def TFTColor(r,g,b) :
- return ((b & 0xF8) << 8) | ((g & 0xFC) << 3) | (r >> 3)
-
-spi = SoftSPI(baudrate=1000000, polarity=1, phase=0, sck=Pin(2), mosi=Pin(3), miso=Pin(10))
-tft=tft(spi, 11, 7, 7) #DC, Reset, CS
-tft.initr()
-tft.rgb(True)
-tft.rotation(1) #方向调整
-
-# 绘制背景色
-tft.fill(TFTColor(0,0,0))
-
-w = 20
-h = 20
-max = 160
-for i in range(0,max*4-1):
- x = i * 5 % max
- y = i * 5 // max * h + 24
- tft.fillrect((x,y),(w,h),TFTColor(255,255,255))
- ++i
- time.sleep(0.04)
- tft.fillrect((x,y),(w,h),TFTColor(0,0,0))
My diff:
#diff s ../../../GuyCarver/MicroPython/lib/ST7735.py -up
--- s 2023-09-05 04:37:51.199898388 +0800
+++ ../../../GuyCarver/MicroPython/lib/ST7735.py 2023-09-03 23:48:04.368648368 +0800
@@ -1,15 +1,17 @@
-import machine as pyb
-from machine import Pin, SoftSPI, SPI
-import time
-import esp32
-import micropython
+#Driver for Sainsmart 1.8" tft display ST7735
+#Translated by Guy Carver from the ST7735 sample code.
+#Display uses SPI interface.
+
+#todo: Use const()
+
+import pyb
from math import sqrt
-#@micropython.native
+@micropython.native
def clamp( aValue, aMin, aMax ) :
return max(aMin, min(aMax, aValue))
-#@micropython.native
+@micropython.native
def TFTColor( aR, aG, aB ) :
'''Create a 16 bit rgb value from the given R,G,B from 0-255.
This assumes rgb 565 layout and will be incorrect for bgr.'''
@@ -100,17 +102,17 @@ class tft(object) :
'''Create a 565 rgb TFTColor value'''
return TFTColor(aR, aG, aB)
- def __init__( self, aLoc, aDC, aReset, aCS ) :
+ def __init__( self, aLoc, aDC, aReset ) :
'''aLoc SPI pin location is either 1 for 'X' or 2 for 'Y'.
aDC is the DC pin and aReset is the reset pin.'''
self._size = tft._SCREENSIZE
self.rotate = 0 #Vertical with top toward pins.
self._rgb = True #color order of rgb.
- self.dc = pyb.Pin(aDC, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
- self.reset = pyb.Pin(aReset, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
+ self.dc = pyb.Pin(aDC, pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN)
+ self.reset = pyb.Pin(aReset, pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN)
rate = 200000 #100000000 #Set way high but will be clamped to a maximum in SPI constructor.
cs = "X5" if aLoc == 1 else "Y5"
- self.cs = pyb.Pin(cs, pyb.Pin.OUT, pyb.Pin.PULL_DOWN)
+ self.cs = pyb.Pin(cs, pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN)
self.cs.high()
self.spi = pyb.SPI(aLoc, pyb.SPI.MASTER, baudrate = rate, polarity = 1, phase = 0, crc=None)
self.colorData = bytearray(2)
@@ -144,7 +146,7 @@ class tft(object) :
self._size =(self._size[1], self._size[0])
self._setMADCTL()
- #@micropython.native
+ @micropython.native
def pixel( self, aPos, aColor ) :
'''Draw a pixel at the given position'''
if 0 <= aPos[0] < self._size[0] and 0 <= aPos[1] < self._size[1]:
@@ -353,7 +355,7 @@ class tft(object) :
self.vline((aPos[0] + x, y0), ln, aColor)
self.vline((aPos[0] - x, y0), ln, aColor)
- def fill( self, aColor = _BLACK ) :
+ def fill( self, aColor = BLACK ) :
'''Fill screen with the given color.'''
self.fillrect((0, 0), self._size, aColor)
@@ -401,7 +403,7 @@ class tft(object) :
self._writecommand(_RAMWR) #Write to RAM.
- #@micropython.native
+ @micropython.native
def _writecommand( self, aCommand ) :
'''Write given command to the device.'''
self.dc.low()
@@ -409,7 +411,7 @@ class tft(object) :
self.spi.send(aCommand)
self.cs.high()
- #@micropython.native
+ @micropython.native
def _writedata( self, aData ) :
'''Write given data to the device. This may be
either a single int or a bytearray of values.'''
@@ -418,21 +420,21 @@ class tft(object) :
self.spi.send(aData)
self.cs.high()
- #@micropython.native
+ @micropython.native
def _pushcolor( self, aColor ) :
'''Push given color to the device.'''
self.colorData[0] = aColor >> 8
self.colorData[1] = aColor
self._writedata(self.colorData)
- #@micropython.native
+ @micropython.native
def _setMADCTL( self ) :
'''Set screen rotation and RGB/BGR format.'''
self._writecommand(_MADCTL)
rgb = _TFTRGB if self._rgb else _TFTBGR
self._writedata(tft._TFTRotations[self.rotate] | rgb)
- #@micropython.native
+ @micropython.native
def _reset( self ) :
'''Reset the device.'''
self.dc.low()
@@ -637,7 +639,7 @@ class tft(object) :
#
# self.cs.high()
- #@micropython.native
+ @micropython.native
def initg( self ) :
'''Initialize a green tab version.'''
self._reset()
@@ -746,27 +748,3 @@ class tft(object) :
# t.initg()
## t.fill(0)
# return t
-
-# 由于ftf屏的颜色有问题,因此需要重写一个函数修复一下
-def TFTColor(r,g,b) :
- return ((b & 0xF8) << 8) | ((g & 0xFC) << 3) | (r >> 3)
-
-spi = SoftSPI(baudrate=1000000, polarity=1, phase=0, sck=Pin(2), mosi=Pin(3), miso=Pin(10))
-tft=tft(spi, 11, 7, 7) #DC, Reset, CS
-tft.initr()
-tft.rgb(True)
-tft.rotation(1) #方向调整
-
-# 绘制背景色
-tft.fill(TFTColor(0,0,0))
-
-w = 20
-h = 20
-max = 160
-for i in range(0,max*4-1):
- x = i * 5 % max
- y = i * 5 // max * h + 24
- tft.fillrect((x,y),(w,h),TFTColor(255,255,255))
- ++i
- time.sleep(0.04)
- tft.fillrect((x,y),(w,h),TFTColor(0,0,0))
Hi, Thank you very much for the repo!
I am new to micropython and trying to play with a st7735 display on esp32c3 and set up micropython with mpremtoe enabled, next I am trying to run some display test but failed with some errors.
Can I import the libs via mpremote? How can I do it?
My test: